JavaScript中_proto_和prototype的区别

先说个总结 1.对象有属性__proto__,指向该对象的构造函数的原型对象。 2.方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象 3.prototype.__proto__都指向Object.prototype

关系图

关系图
使用 SMMS 存储图片,这种平台找好久了。

相关题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function person() {}
person.prototype = { atrr1: "aaaa", atrr2: "bbbb" };
var obj = new person();
console.log(obj.atrr1);
console.log(obj.atrr2);
console.log(obj instanceof person);
console.log("**********************************");
person.prototype = {};
console.log(obj.atrr1);
console.log(obj.atrr2);
console.log(obj instanceof person);
console.log("**********************************");
console.log(obj.__proto__);
console.log(person.prototype);

先讲个容易入坑的知识点

instanceof是根据原型链来判断实例是否属于某个类型。 ####误解
因实例的__proto__指向的是类的prototype,因此可能会认为,当类的prototype发生改变时,实例proto也发生了改变,所以proto也是新的。
这就打错特错了。 ####解释
实例的proto指向类的 prototype 不错,但是他们指向的都是一个地址。他们不过是地址的“变量”而已,而变量是可以指向一个新的地址,但是老的地址并不会因为变量的改变而改变。老的地址还是存在的。
所以上面的题,当改变 person 的 prototype 指向时,他们是不相等的,因为他们分别指向了不同的地址。

更直接的例子

1
2
3
var man = { name: "lisi" };
var woman = man;
man = { name: "zhangsan" };

man 只是一个变量,当指向新的地址时,lisi 还在那。

关系图

文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/01/16/JavaScript%E4%B8%AD-proto-%E5%92%8Cprototype%E7%9A%84%E5%8C%BA%E5%88%AB/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏