0

javascript 継承を使用していて、サブクラスがその親から継承する場合、常に次のようにします。

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;
}

誰が私のためにそれを説明できますか?

4

1 に答える 1

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

このコードでは、klass.prototype は、parent.prototype と同じオブジェクトに設定されています (親と 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

プロトタイプを共有することが悪い考えである理由がわかります。

于 2013-11-13T16:32:44.123 に答える