我试图以不同的方式创建对象,并尝试观察以各种方式创建的对象的原型属性。
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:为什么存在这种差异?
答案 0 :(得分:2)
prototype
属性不是对象的原型。那是(通常)__proto__
属性,虽然我不认为任何版本的ECMAScript标准都要求该属性。函数prototype
的{{1}}属性是将用作Foo
生成的对象的原型的对象。