Ответ 1
Вместо этого:
myobj = Object.create(Object);
... Я думаю, вы имеете в виду, что это эквивалент:
myobj = Object.create(Object.prototype);
... потому что:
Object.getPrototypeOf( {a:1, b:2} ) === Object.prototype; // true
Что касается того, почему раньше использовать null
, если ваш объект не нуждается в каких-либо свойствах Object.prototype
, то окончание цепи раньше было бы технически (хотя и незначительно) ускорять поиск свойств, когда свойство не существует для объекта, о котором идет речь.
Обратите внимание, что я говорю "раньше", потому что цепочка всегда заканчивается на null
.
Object.getPrototypeOf( Object.prototype ); // null
obj ----------> proto -------> Object.proto -----> null
+---------+ +---------+ +-------------+
| | | | | |
| foo:1 | | bar:1 | | toString:fn | null
| | | | | |
+---------+ +---------+ +-------------+
^ ^ ^ X
| | | |
obj.foo ------+ | | |
^ | | |
obj.bar-------+----------------+ | |
^ ^ | |
obj.toString--+----------------+------------------+ |
^ ^ ^ |
obj.baz-------+----------------+------------------+---------------+
^---property lookups
Обратите внимание, что свойство baz
не существует в цепочке прототипов.
Из-за этого ему необходимо последовательно искать каждый объект, пока он не достигнет null
, прежде чем он поймет, что baz
не существует нигде.
Если вы удалите Object.prototype
из цепочки, он немного ускорится null
.