思考题答案,请老师指正,谢谢
来源:2-6 思考题:对象变量.__proto__.方法 和对象变量.方法的不同【原理加固题】

起点丶
2022-07-01
他们的 this 指向不同:
- QQZhangSan.proto.show() // this 指向为 QQUsers.prototype
– 因此输出的时候 this.QQNo、this.QQAge、this.QQMark 全是 undefined - QQZhangSan.show() // this 指向为 QQZhangSan 实例
- 但是他们都引用同一块内存空间 QQZhangSan.proto.show === QQZhangSan.show 结果是 true
3回答
-
首先答案是:
QQZhangSan.__proto__.show() 和QQZhangSan.show()区别如下:
1. 当只有原型上有show()方法, 而实例上没有show()方法 区别如下:
1.1 QQZhangSan.__proto__.show() 中的show方法this始终指向原型对象空间
因为只有commonfriends为原型对象空间中的属性,所以能输出好友信息
其他的this.QQNo,this.QQAge this.QQMark都为undefined1.2 QQZhangSan.show()会首先从实例对象空间查找show()方法,但是没有找到,
就顺着__proto__【后面说的原型链属性】找到原型对象空间中的show()方法
此刻show()方法中的this表示QQZhangSan实例对象变量,
this.QQNo,this.QQAge this.QQMark都能直接输出,this.commonfriends
会继续查找原型对象空间,在输出好友信息2. 当原型和实例上都有show()方法,区别如下:
2.1 QQZhangSan.__proto__.show()输出和上面1.1 完全相同 [this 还是指向原型对象空间]
2.2 QQZhangSan.show()会直接从实例对象空间找到show()方法,输出结果和规律上1.2完全相同112022-07-01 -
keviny79
2022-07-01
*****
但是他们都引用同一块内存空间 QQZhangSan.proto.show === QQZhangSan.show 结果是 true
这句话不完全对,
当 QQUsers 中有 show 实例方法时,返回false, 如果没有,会顺着__proto__原型链上找到show方法,这时才返回true
function QQUsers(QQNo_, QQAge_, QQMark_) {
this.QQNo = QQNo_ //QQ号
this.QQAge = QQAge_ //Q龄
this.QQMark = QQMark_ //QQ标签
this.show = function () {//show 实例方法
console.log("show:")
}
}
10 -
weixin_慕妹0220249
2022-11-14
就目的而言,没啥区别。走的路不同而已,一个直接找老爹要,一个先找自己要,再找老爹要
00
相似问题