>我试图以不同的方式创建对象,并试图观察以每种方式创建的对象的原型属性。
var a = {a: 1};
//The prototype chain as mentioned in [here][1]
// a ---> Object.prototype ---> null
现在,我观察到a.prototype是未定义的。问题1:如果它未定义,那么原型链是如何形成的?a.hasOwnProperty的存在是因为原型链。
现在如果我说:
var myFunc = function(){};
// Prototype chain: myFunc ---> Function.prototype ---> Object.prototype ---> null
对于这种创建方式,myFunc.prototype 存在。
问题2:为什么存在这种差异?
prototype
属性不是对象的原型。这是(通常)__proto__
属性,尽管我认为任何版本的 ECMAScript 标准都不需要该属性。函数Foo
的prototype
属性是将用作由 new Foo()
生成的对象的原型的对象。