valueOf - возвращается сам обьект, на котором вызван данный метод, смысл только для классов, которым мы переопределим этот метод и будем обьект предствлять как простое значение типа хеш.
constructor - что создало обьект. Например для строки: function String(){[native code]}, для обьекта {}: function Object(){[native code]}, или для кастомного класса: function MyClass(a, b){this.a = a; this.b = b;}
toLocaleString - для обьекта класса Date значения результата данного метода будут отличаться в зависимости под какую локаль настроен браузер клиента, а так обычно результат идентичен со следующей вункцией.
toString - функции представляются в виде строки сорцов, для этих обьектов это самое интересное применение.
isPrototypeOf - true если объект на котором вызывают этот метод является прямым прототипом параметра.
propertyIsEnumerable - true возвращает только на свойства определенные именно в этом обьекте, на свойства выше в цепочке прототипов возвращается false, если true - то это поле появится в for..in. Но почему тогда если добавить в прототип Array, то такие поля появятся в for..in?
hasOwnProperty - true если свойство принадлежит именно самому объекту, а не одному из прототипов по цепочке. Я так понимаю с предыдущим методом есть оличие в том, что некоторые поля прототипов ответятся как тру в предыдущем методе.
Пример использование методом Object
Можно ставить прототипом и не класс, а обьект:
Этот новый метод криэйт в последнийх реализациях JS позволил упростить старый добрый метод наследования.
Допустим у нас есть два класса:
Старый метод:
constructor - что создало обьект. Например для строки: function String(){[native code]}, для обьекта {}: function Object(){[native code]}, или для кастомного класса: function MyClass(a, b){this.a = a; this.b = b;}
toLocaleString - для обьекта класса Date значения результата данного метода будут отличаться в зависимости под какую локаль настроен браузер клиента, а так обычно результат идентичен со следующей вункцией.
toString - функции представляются в виде строки сорцов, для этих обьектов это самое интересное применение.
isPrototypeOf - true если объект на котором вызывают этот метод является прямым прототипом параметра.
propertyIsEnumerable - true возвращает только на свойства определенные именно в этом обьекте, на свойства выше в цепочке прототипов возвращается false, если true - то это поле появится в for..in. Но почему тогда если добавить в прототип Array, то такие поля появятся в for..in?
hasOwnProperty - true если свойство принадлежит именно самому объекту, а не одному из прототипов по цепочке. Я так понимаю с предыдущим методом есть оличие в том, что некоторые поля прототипов ответятся как тру в предыдущем методе.
Пример использование методом Object
Object.prototype.findOwnerOfProperty = function(propName){
var currentObject = this;
while(currentObject !== null) {
if (currentObject.hasOwnProperty(propName)) {
return currentObject;
} else {
currentObject = currentObject.__proto__;
}
}
return "No property found!";
}
Можно ставить прототипом и не класс, а обьект:
var shoe = { size: 6, gender: "women", construction: "slipper"};
var magicShoe = Object.create(shoe);
magicShoe.jewels = "ruby";
magicShoe.travelAction = "click heels";
magicShoe.actionRequired = 3;
shoe.isPrototypeOf(magicShoe);//true
Этот новый метод криэйт в последнийх реализациях JS позволил упростить старый добрый метод наследования.
Допустим у нас есть два класса:
function Animal(name) {
this.name = name
this.canWalk = true
}
Animal.prototype = {
live: function(){}
};
function Rabbit(name) {
this.name = name
}
Старый метод:
function extend(Child, Parent) {
var F = function() { };
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.superclass = Parent.prototype;
}
extend(Animal, Rabbit);
Новый метод:
Rabbit.prototype = Object.create(Parent.prototype);
Комментариев нет:
Отправить комментарий