且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

javascript - 关于经典继承(constructor stealing)有个疑问

更新时间:2023-09-24 21:33:52

来看看创造实例的时候发生了什么。

//首先SubClass()的this指向sub1实例(中间还有个新创造的空{},先不管这个过程)。
var sub1 = new SubClass();
//开始执行下面的函数
//内部相当于sub1.subname = "your sister",SuperClass.call(sub1);
function SubClass() {
    this.subname = "your sister";
    SuperClass.call(this);
}
//然后因为用call调用了SuperClass,执行SuperClass函数
//因为将SubClass环境中的this传了进去,就相当于sub1.bra = ["a","b"]
function SuperClass() {
    this.name = "women";
    this.bra = ["a", "b"];
}

对于sub2的创造是一样的。
中间相当于sub2.bra=["a","b"]
而不是之前的
sub1.bra指向 XXX.prototype.bra
sub2.bra也指向 XXX.prototype.bra
现在都是各自本身的属性,修改就不会相互影响了。