为什么javascript继承像这样工作?

时间:2013-11-13 16:27:25

标签: javascript class inheritance

当我们使用javascript继承,并且子类从其Parent继承时,我们总是这样做:

var klass = function(){ this.init.apply(this, arguments)};

if(parent) {
    var subclass = function(){};
    subclass.prototype = parent.prototype;
    klass.prototype = new subclass;
}

上面的代码来自“Javascript Web Application”,我很困惑它与下面的区别:

var klass = function(){ this.init.apply(this, arguments)};
if(parent) {
    klass.prototype = parent.prototype;
}

谁能为我解释一下?

1 个答案:

答案 0 :(得分:0)

var klass = function(){ this.init.apply(this, arguments)};
if(parent) {
    klass.prototype = parent.prototype;
}

在此代码中,klass.prototype设置为相同的对象parent.prototype(parent和klass共享相同的原型)。因此,如果你这样做:

klass.prototype.myFunc = function() {}

var p = new parent();
p.myFunc // myFunc will be available on all instances of parent (which is bad!)

更糟糕的是,如果你有

parent.prototype.myFunc = function() { console.log('I parent'); };

您尝试覆盖klass的myFunc函数:

klass.prototype.myFunc = function() { console.log('I child'); };

var p = new parent()
parent.myFunc() // I child

你可以看到为什么分享原型是一个坏主意。