Как значение __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), используйте прототип по умолчанию для области.

Другие вопросы по тегам