理解protopype和__proto__的区别在于一句话:
只有函数Function和对象Object有
prototype
属性,而实例对象没有prototype属性,但它们的实例对象有__proto__属性,并且它们(prototype、_proto_)指向同一个原型对象,即它们是相等的 (指向同一地址)。
我常听到一个容易令人误解的观点:对象没有prototype属性,只有函数有prototype属性。
这句话让我晕了很久,为什么呢?因为函数不就是一个对象吗?我们不是经常看到Object.prototype吗?所以上面的观点个人认为是错误的。
证明函数是对象:
console.log(Function instanceof Object)
经过许久的认证,我得出了上面的观点:只有函数Function和对象Object有prototype
属性,而实例对象没有prototype属性。
下面展开我的证明:
1.prototype是如何来的?我们所创建的每一个函数(普通函数和构造函数),解析器都会向函数添加一个属性prototype。一个函数对应一个prototype。
//创建foo函数
function foo(){
let name="老王";
}
console.log(foo.prototype);//证明foo函数有prototype
//创建bar函数
function bar(){
let name="老王";
}
console.log