Przejdź do treści

Manipulacja instancją obiektu w JavaScript - Object.prototype

Co można zrobić z instancją obiektu JavaScript?

Konstruktor obiektu ogólnego w JavaScript - constructor

Gdzie jest zapisany konstruktor obiektu ogólnego?

Object.prototype.constructor
Wartość:
Function - konstruktor obiektu

Zawiera konstruktor wbudowanego obiektu ogólnego Object.

Przykład Object.prototype.constructor

Object.prototype.constructor === Object;  // true
new Object().constructor === Object;      // true
Object.prototype.constructor === Boolean; // false
Object.prototype.constructor === Number;  // false
Object.prototype.constructor === String;  // false
Object.prototype.constructor === Array;   // false

Przekształcanie obiektu na tekst - toString

W jaki sposób przekształcić obiekt na prosty tekst?

Object.prototype.toString()
Wartość:
String - wartość będąca połączeniem tekstów: "[object " + nazwa klasy + "]"

Funkcja toString jest wywoływana automatycznie zawsze wtedy, gdy oczekiwana jest wartość tekstowa, a przekazano obiekt.

Przykład Object.prototype.toString

new Object().toString();                            // "[object Object]"
new Object() + "";                                  // "[object Object]"
 
Object.prototype.toString.call(undefined);          // "[object Undefined]"
Object.prototype.toString.call(null);               // "[object Null]"
Object.prototype.toString.call(new Boolean(true));  // "[object Boolean]"
Object.prototype.toString.call(new Number(1));      // "[object Number]"
Object.prototype.toString.call(new String("test")); // "[object String]"
Object.prototype.toString.call(new Array());        // "[object Array]"
 
Object.prototype.toString.call(true);               // "[object Boolean]"
Object.prototype.toString.call(1.2);                // "[object Number]"
Object.prototype.toString.call("test");             // "[object String]"
 
var Cls = function () {};
new Cls() + "";                                     // "[object Object]"
Object.prototype.toString.call(new Cls());          // "[object Object]"
Cls.prototype.toString = function () {
    return "[object Cls]";
};
new Cls() + "";                                     // "[object Cls]"

Przekształcanie obiektu na rodzimy tekst - toLocaleString

W jaki sposób przekształcić obiekt na tekst zapisany w rodzimym języku użytkownika?

Object.prototype.toLocaleString()
Wartość:
String - wartość wywołania metody toString
Wyjątki:
TypeError - obiekt nie posiada metody toString

Ta funkcja została wprowadzona, aby dostarczyć wszystkim obiektom spójnego interfejsu do konwersji na tekst w rodzimym języku użytkownika.

Przykład Object.prototype.toLocaleString

new Object().toLocaleString();                   // "[object Object]"
 
Object.prototype.toLocaleString.call(true);      // "true"
Object.prototype.toLocaleString.call(1.2);       // "1.2"
Object.prototype.toLocaleString.call("test");    // "test"
 
Object.prototype.toLocaleString.call(undefined); // TypeError
Object.prototype.toLocaleString.call(null);      // TypeError

Przekształcanie obiektu na wartość prostą - valueOf

Jak przekształcić złożony obiekt na wartość prostą (logiczną, liczbę, tekst)?

Object.prototype.valueOf()
Wartość:
wartość przekazana do konstruktora albo sam niezmieniony obiekt

Wszystkie typy proste (wartość logiczna, liczba, tekst) mają swój odpowiednik obiektowy. Aby skonwertować prostą wartość na obiekt, używamy globalnej funkcji Object. Czasami potrzebujemy wykonać konwersję w drugą stronę - tzn. z typu obiektowego na prosty. Do tego właśnie została przeznaczona funkcja Object.prototype.valueOf. Jeżeli obiekt nie ma jej zaimplementowanej, zwracana jest po prostu nietknięta instancja.

Przykład Object.prototype.valueOf

Object(true).valueOf();   // true
Object(1).valueOf();      // 1
Object("test").valueOf(); // "test"
 
var obj = {};
obj.valueOf() === obj;    // true

Sprawdzanie posiadania właściwości obiektu - hasOwnProperty

W jaki sposób sprawdzić, czy obiekt posiada właściwość o podanej nazwie?

Object.prototype.hasOwnProperty(V)
Parametry:
String V - nazwa właściwości
Wartość:
Boolean - czy obiekt posiada podaną właściwość

Sprawdza, czy obiekt posiada właściwość o podanej nazwie. Nie uwzględnia właściwości przejętych z prototypu, a jedynie bezpośrednio przypisane do obiektu.

Przykład Object.prototype.hasOwnProperty

var obj = {test: 1, x: undefined};
obj.m = function () {};
 
obj.hasOwnProperty("test"); // true
obj.hasOwnProperty("x");    // true
obj.hasOwnProperty("m");    // true
obj.hasOwnProperty("p");    // false
 
delete obj.x;
obj.hasOwnProperty("x");    // false
 
var Cls = function () {
    this.p = 1;
};
Cls.prototype.m = function () {};
obj = new Cls();
obj.hasOwnProperty("p");    // true
obj.hasOwnProperty("m");    // false

Sprawdzanie prototypu obiektu - isPrototypeOf

W jaki sposób sprawdzić, czy podany obiekt jest prototypem określonej instancji obiektu?

Object.prototype.isPrototypeOf(V)
Parametry:
V - instancja obiektu
Wartość:
Boolean - czy obiekt jest prototypem podanej instancji

Sprawdza, czy obiekt bieżący jest prototypem podanej instancji obiektu. Sprawdzany jest przy tym cały łańcuch prototypów, wynikający z dziedziczenia.

Przykład Object.prototype.isPrototypeOf

var Device = function () {};
 
var Computer = function () {};
Computer.prototype = Object.create(Device.prototype);
 
var Laptop = function () {};
Laptop.prototype = Object.create(Computer.prototype);
 
Device.prototype.isPrototypeOf(new Device());   // true
Device.prototype.isPrototypeOf(new Computer()); // true
Device.prototype.isPrototypeOf(new Laptop());   // true
Computer.prototype.isPrototypeOf(new Laptop()); // true
Object.prototype.isPrototypeOf(new Laptop());   // true
Object.prototype.isPrototypeOf({});             // true
 
Computer.prototype.isPrototypeOf(new Device()); // false
Object.prototype.isPrototypeOf(true);           // false
Object.prototype.isPrototypeOf(1);              // false
Object.prototype.isPrototypeOf("test");         // false
Object.prototype.isPrototypeOf(null);           // false

Sprawdzanie dostępności właściwości w pętli - propertyIsEnumerable

Jak sprawdzić, czy podana właściwość będzie dostępna w pętli?

Object.prototype.propertyIsEnumerable(V)
Parametry:
String V - nazwa właściwości
Wartość:
Boolean - czy podana właściwość obiektu będzie dostępna w pętli for-in

Sprawdza, czy obiekt posiada właściwość o podanej nazwie, która będzie dostępna w pętli for-in [zobacz: Object.defineProperty - enumerable].

Przykład Object.prototype.propertyIsEnumerable

var obj = {test: undefined};
Object.defineProperty(obj, "p", {enumerable: false});
 
obj.propertyIsEnumerable("test"); // true
obj.propertyIsEnumerable("p");    // false
obj.propertyIsEnumerable("x");    // false
Facebook