js原型链问题?

image.png

为什么不能先在SubType创建一个新的getSuperValue的方法,然后再去确立 subType 和 SuperType的关系.

SubType.prototype = new SuperType();
var instance = new SubType();
这里的原型练继承的时候, 是不是instance先搜索SubType里面的属性, 如果没有该属性的话,再去搜索SuperType里面的??????????还是说相反,先搜索SuperType里面的???????/

阅读 2.6k
4 个回答

第一个问题画图给你解释一下

无标题.png

这就是原型式继承需要注意的地方,给子类型原型添加属性和方法必须在替换原型之后

先写再new,不就被覆盖了么。

关于先写后写的问题 @雾秋 说的是对的。

在你执行 SubType.prototype = new SuperType(); 这一句后,你前面给 SubType.prototype.XXX 的修改就都已经被覆盖掉了。

就像:

let obj = {};
obj.X = 0;
obj.Y = '';

obj = {}; // obj 本身都重新赋值了,你前面啥 X 啥 Y 是 obj 原来的属性,也跟着没了

先从自身实例属性上找;实例上没有就去自己的原型链上找;自己的原型链上还没有就去继承的原型链上找,再没有就继续向上,直到头为止。

const obj = new SomeClass();

// 按下面顺序找 someProp
obj.someProp; // 1
SomeClass.prototype.someProp; // 2
SomeClass.prototype.__proto__.someProp // 3 ...
a.getSuperValue = function() {}
a = {}
a.getSuperValue // undefined
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题