Почему прототипы вручную инициализируются, чтобы NULL все еще наследуют от объекта

StackOverflow https://stackoverflow.com/questions/6300840

  •  22-10-2019
  •  | 
  •  

Вопрос

Если я напишу это

var o = Object.create(null)
alert(o instanceof Object) // this is false

Почему это в конечном итоге будет правдой

function o() {

}
o.prototype = null
alert(new o() instanceof Object) // this is true

Не должно вручную настраивать прототип на NULL, заставляя его наследовать от ничего, как Object.Create. Заранее спасибо :-)

Это было полезно?

Решение

Вкратце, если прототип конструктора не является объектом, то приведены экземпляры Object.Prototype как их [[прототип]].

Деталь в ECMA-262, §13.2.2 [[Construct]]:

Когда внутренний метод [[Construct]] для функционального объекта F вызывается с возможным пустым списком аргументов, предпринимаются следующие шаги:

  1. Позволять obj Будьте недавно созданным нативным объектом Ecmascript.
  2. Установить все внутренние методы obj как указано в 8.12.
  3. Установить внутреннее свойство [[класс] obj к "Объект".
  4. Установить [[[расширяется]] внутреннее свойство obj к истинный.
  5. Позволять прото быть значением вызова [[get]] внутреннего свойства F с аргументом "прототип".
  6. Если тип (прото) объект, установите [[прототип]] внутреннее свойство objк прото.
  7. Если тип (прото) не объект, установите [[прототип]] внутреннее свойство obj к стандартному встроенному объектному объекту объекта, как описано в 15.2.4.
  8. Позволять результат быть результатом вызова [[Call]] внутреннего свойства Фланг, предоставление obj как это ценность и предоставление списка аргументов, передаваемого в [[Construct]] как Аргс.
  9. Если тип (результат) объект, затем вернуть результат.
  10. Возвращаться obj.

Отмечая, что в пунктах 6 и 7, null тип NULL (ECMA-262 §8.2), это не то же самое, что typeof null, который объект.

Другие советы

Когда вы создаете это так, он возвращает объект o.

Его (скрытая) цепочка прототипа Все еще указывает на Object

Prototype

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top