Как значение __proto__ присваивается в JavaScript?
Недавно я играл с объектом-прототипом javaScript и наткнулся на приведенный ниже пример.
function Foo(){
}
Foo.prototype=null;
var fooObj=new Foo();
Когда я смотрю на fooObj из инструментов разработчика, __proto__
свойство указывает на прототип глобального объекта, и я могу получить доступ ко всем свойствам и функциям, определенным в объекте-прототипе объекта. который должен указывать на объект-прототип функции Foo, так как я присвоил ему значение null, которое я ожидал __proto__
будет указывать на ноль, указывая __proto__
может иметь больше смысла, но я хочу понять, как значение присваивается __proto__
после создания объекта? что заставляет его указывать объект-прототип Object?
Я видел много вопросов о прототипе и прото, но ни один из них не решает мои сомнения.
1 ответ
Полная информация в спецификации *, но когда вы используете функцию конструктора с null
для его prototype
имущество, new
правопреемники Object.prototype
(ну, прототип по умолчанию для области; Object.prototype
для наших целей) в качестве прототипа нового объекта.
Я считаю, что единственный способ создать объект без прототипа Object.create(null)
,
Вы можете установить прототип на null
после создания объекта через Object.setPrototypeOf
, но в целом лучше избегать изменения прототипа объекта после его создания.
* В частности, он спрятан в GetPrototypeFromConstructor
, который говорит, что если тип конструктора prototype
свойство не является объектом (для этого null
имеет тип Null, а не тип Object), используйте прототип по умолчанию для области.