超类有一个'容器'属性。
当子类继承自超类时,'container'属性在子类之间共享。
如何实现每个子类都有自己的超类副本及其所有属性。
var a = function() {
};
a.prototype.ax = function() {
this.container = [];
}
var b = function() {
a.call(this);
}
b.constructor = b;
b.prototype = Object.create(a.prototype);
b.prototype.ax = function() {
a.prototype.ax();
this.container.push('b');
}
var c = function() {
a.call(this);
}
c.constructor = c;
c.prototype = Object.create(a.prototype);
c.prototype.ax = function() {
a.prototype.ax();
this.container.push('c');
}
var bi = new b();
var ci = new c();
bi.ax();
ci.ax();
// why bi container gets overriden?
console.log(bi.container);
答案 0 :(得分:0)
你的问题在这里:
b.prototype.ax = function() {
a.prototype.ax();
this.container.push('b');
}
要调用超类函数,您需要这样:
b.prototype.ax = function() {
a.prototype.ax.call( this );
this.container.push('b');
}
否则,您只需使用ax
作为上下文(a.prototype
的值)调用this
。