Przejdź do treści

JS / Object.prototype - Kurs JavaScript (JS)

W tym rozdziale dowiesz się...

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

  • JS
    constructor

    Gdzie jest zapisany konstruktor obiektu ogólnego?

  • JS
    toString

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

  • JS
    toLocaleString

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

  • JS
    valueOf

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

  • JS
    hasOwnProperty

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

  • JS
    isPrototypeOf

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

  • JS
    propertyIsEnumerable

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

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;  // 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

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:

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]"

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:

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

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(true).valueOf();   // true
Object(1).valueOf();      // 1
Object("test").valueOf(); // "test"
 
var obj = {};
obj.valueOf() === obj;    // true

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:

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

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:

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

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:

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