Object.create
Cоздание обьекта и определение его прототипа:
Прибить обьекту hasOwnProperty можно так:
Function.prototype.bind
Object.create(proto [, propertiesObject ])
Cоздание обьекта и определение его прототипа:
var o = Object.create({
param1: 3,
method1: function(){...}
});
Прибить обьекту hasOwnProperty можно так:
var o = Object.create(null); console.log(o.hasOwnProperty);//nullpropertiesObject - а это вообще интересная штука! Это обьект в котором мы определяем именно собственные свойства. Только свойству нельзя просто указать значение, мы это обязаны сделать черз обьект с полем value, кроме того неявно указывается поля
writable: false, enumerable: false, configurable: false. Что означет первое - понятно, а вот что 2 и 3 мне пока не понятно)
var o = Object.create({}, { p: { value: 42 } });
o.p = 24;
console.log(o.p);//O-o-oh 42!!!
o2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } });
o.p = 24;
console.log(o.p);// 24 - о так привычней)
Ага написал этот пример, почитал дальше MDN, нашел что такое enumerable свойство поля. Так вот те у кого это свойство == тру, будут возвращены из обьекта o, методом Object.keys:
var ekeys = Object.keys(o);//enumerable own(not from its [[Prototype]]) propertiesА методом Object.getOwnPropertyNames, мы получаем все свои свойства как enumerable, так и нет, но только не [[Prototype]]:
var keys = Object.getOwnPropertyNames(o);А и кстати
for..in в ECMAScript 5th Edition, возвращает все только свои enumerable арибуты и enumerable арибуты прототипа.
Чтобы вернуть все атрибуты как свои, так и прототипа, то можно сделать так:
function listAllProperties(o){
var objectToInspect;
var result = [];
for(objectToInspect = o; objectToInspect !== null; objectToInspect = Object.getPrototypeOf(objectToInspect)){
result = result.concat(Object.getOwnPropertyNames(objectToInspect));
}
return result;
}
Тут мы видим как всплывает еще один новый метод Object.getOwnPropertyNames. Кроме того, эта функция дает нам еще одну плюшку - мы можем увидеть все даже скрытые прототипные свойства(те которые перегружены свойствами в наследниках, потому что имеют такие же имена).
Function.prototype.bind
Комментариев нет:
Отправить комментарий