我无法获得这段代码,为什么ClassA方法被分配给ClassB。具体来说,我无法理解ClassB中前两行代码的继承行为。
function ClassA(sColor) {
this.color = sColor;
this.sayColor = function () {
alert(this.color);
};
this.sayColor1 = function () {
alert("hi");
};
}
function ClassB(sColor, sName) {
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod;
this.name = sName;
this.sayName = function () {
alert(this.name);
};
}
var objA = new ClassA('red');
var objB = new ClassB('blue', 'Nicholas');
objA.sayColor();
objB.sayColor();
objB.sayColor1();
objB.sayName();
答案 0 :(得分:2)
您将ClassA
指定为ClassB
中的实例方法,这不是继承。如果您希望ClassB
扩展ClassA
,可以通过以下方式执行此操作:
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
// do the rest
}
ClassB.prototype = Object.create(ClassA.prototype);
答案 1 :(得分:1)
我会尝试一下解释ClassB
在第一行中,属性newMethod
引用函数ClassA
this.newMethod = ClassA;
然后,在第二行,正在调用该函数,
this.newMethod(sColor);
在这种情况下,ClassA
内的函数引用ClassB
中的对象,因此ClassA的所有属性都被添加到创建的对象中。
并且,最后引用被删除
delete this.newMethod;
你可以这样做,只需写ClassA.call(this,sColor);
,而不是这三行
答案 2 :(得分:-1)
问题在于您在JS中实现继承的方式
对象伪装在JS中以这种方式完成:
function ClassA () {
}
function ClassB() {
this.superclass = ClassA;
this.superclass();
delete this.superclass;
}
ClassB.prototype = new ClassA;
尝试以这种方式实施......
如需更多参考,请查看: