Это потому, что Object.prototype.isPrototypeOf() возвращает прототип, унаследованный от его родительского конструктора.
function C(){ }
Теперь это строится примитивного типа Function
Поэтому при вызове getPrototypeOf
на C
__Proto__
поиска от унаследованной родительского конструктора возвращается (Прочитано это description).
Смотрите ниже для иллюстрации: Смотрите встроенные комментарии для понимания
typeof C // "function"
C instanceof Function // True
Object.getPrototypeOf(C) === Function.constructor.prototype // "True"
Function.constructor.prototype // "function(){}"
Object.getPrototypeOf(C) // "function(){}"
Теперь следующая часть:
C.prototype.fname = "John";
typeof C.prototype // object
Следовательно, его конструктор становится C()
с объектом цепочка прототипов, унаследованных от C()
, который будет наследоваться при создании такого экземпляра new C()
Следовательно:
C.prototype.constructor // "function C(){}" -- Parent constructor
Итак, когда вы LookUp Prototype
на C()
она возвращает prototype
в наследство от его конструктора, как показано ниже
C.prototype.constructor === C //true
C.prototype === C.prototype.constructor.prototype // True
C.prototype.constructor.prototype // C {fname: "John"}
C.prototype // C {fname: "John"}
Заключение:
Если когда-нибудь вам искать прототип на поиск объектов или функций происходит в свойствах, унаследованных от его родительского конструктора.
Object.getPrototypeOf(C) === C.constructor.prototype //true
Object.getPrototypeOf(C) === Function.prototype // true
C.prototype === (new C()).__proto__ // true (this is for illustration only dont use __proto__ in your code)
Object.getPrototypeOf(C)
не равна C.prototype
, потому что их Конструкторы разные.
Ссылки:
сделал т он объясняет вам помощь? – Nirus