一个没有实例化过的对象没有原型。
1 2 3 Uncaught TypeError: Cannot read property 'prototype' of undefined at <anonymous>:1:3 (anonymous) @ VM301:1
把a用Object实例化后:
1 2 a=new Object ; a.prototype;
1 2 3 4 5 6 7 8 9 10 11 12 13 constructor: ƒ Object() hasOwnProperty: ƒ hasOwnProperty() isPrototypeOf: ƒ isPrototypeOf() propertyIsEnumerable: ƒ propertyIsEnumerable() toLocaleString: ƒ toLocaleString() toString: ƒ toString() valueOf: ƒ valueOf() __defineGetter__: ƒ __defineGetter__() __defineSetter__: ƒ __defineSetter__() __lookupGetter__: ƒ __lookupGetter__() __lookupSetter__: ƒ __lookupSetter__() get __proto__: ƒ __proto__() set __proto__: ƒ __proto__()
1 2 3 4 5 6 7 8 9 10 11 12 13 constructor: ƒ Object() hasOwnProperty: ƒ hasOwnProperty() isPrototypeOf: ƒ isPrototypeOf() propertyIsEnumerable: ƒ propertyIsEnumerable() toLocaleString: ƒ toLocaleString() toString: ƒ toString() valueOf: ƒ valueOf() __defineGetter__: ƒ __defineGetter__() __defineSetter__: ƒ __defineSetter__() __lookupGetter__: ƒ __lookupGetter__() __lookupSetter__: ƒ __lookupSetter__() get __proto__: ƒ __proto__() set __proto__: ƒ __proto__()
现在假设:let a = new b;
则a.__proto__
指向b.prototype
。
理解有误:
1 2 3 > let var =111 ; > var .prototype; >
即:只有函数有prototype属性。
其实Object
是一个全局对象,也是一个构造函数,以及其他基本类型的全局对象也都是构造函数。
对于js的函数来说,函数也是个对象,且被定义的时候已经被实例化了,所以当然有原型。