当我们使用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;
}
谁能为我解释一下?
答案 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
你可以看到为什么分享原型是一个坏主意。