Хорошо известно, что объявление объектов с нотной JSON делает их "наследуемыми" (или, точнее, похожими на) базовыми Object:
myobj={a:1, b:2};
что почти эквивалентно myobj = Object.create(Object); myobj.a=1; myobj.b=2;
и чем:
Object.getPrototypeOf(myobj)
печатает следующее:
Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
Однако можно вызвать Object.create()
, поставив null
в качестве аргумента:
myobj2 = Object.create(null);
В этом случае будет возвращен пустой прототип:
Object
No Properties
И вот вопрос: в каких случаях и почему я должен разорвать цепочку прототипов на оригинал Object
? Где это может быть полезно?
Обновление:, как уже исправлено ниже, я имею в виду Object.create(Object.prototype)
, а не Object.create(Object)
, который вернет объект Function
(действительно, Object()
является конструкторной функцией для прототипов Object
)..