思考题回答

来源:2-5 【原型】深度透彻掌握原型 【为深度透彻掌握TS类,继承扎根】-3

猿力

2021-07-27

不一样,原因是 new 运算符在创建对象或者说构造函数在构造实例的时候,为实例添加了 __proto__ 属性,指向原型对象空间。而方法中的 this 是在调用的时候才进行绑定,所以QQZhangsan.__proto__.show() 中的 this 其实是指原型对象空间,而QQZhangsan.show() 中的 this 指向的是 QQZhangsan。结果必然不相同。

写回答

3回答

keviny79

2021-08-03


  2. 当原型和实例上都有show()方法,区别如下:
     2.1 QQZhangSan.__proto__.show()输出和上面1.1 完全相同 [this 还是指向原型对象空间]
     2.2 QQZhangSan.show()会直接从实例对象空间找到show()方法,输出结果和规律上1.2完全相同

0
1
猿力
非常感谢!
2021-08-03
共1条回复

keviny79

2021-08-03


QQZhangSan.__proto__.show() 和QQZhangSan.show()区别如下:
  1. 当只有原型上有show()方法, 而实例上没有show()方法 区别如下:
    1.1 QQZhangSan.__proto__.show() 中的show方法this始终指向原型对象空间
    因为只有commonfriends为原型对象空间中的属性,所以能输出好友信息
    其他的this.QQNo,this.QQAge this.QQMark都为undefined

    1.2 QQZhangSan.show()会首先从实例对象空间查找show()方法,但是没有找到,
    就顺着__proto__【后面说的原型链属性】找到原型对象空间中的show()方法
    此刻show()方法中的this表示QQZhangSan实例对象变量,
    this.QQNo,this.QQAge this.QQMark都能直接输出,this.commonfriends
    会继续查找原型对象空间,在输出好友信息

0
0

keviny79

2021-07-30

正确,同学理解的很好啊

0
0

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程