我是Javascript的新手。当我做一些面向目标的编程时,我想在子类中调用超类的构造函数:
function P(p1, p2) {
alert(this);
this.v1 = p1;
this.v2 = p2;
}
var middleObj = function() {};
middleObj.prototype = P.prototype;
var C = function(p1, p2) {
P.bind(this, p1, p2);
P();
}
C.prototype = new middleObj();
C.prototype.constructor = C;
var objChild = new C(1,2);
alert(objChild instanceof P);
alert(objChild.v2);
如果我直接在C()中调用P(),则转向window
,我可以理解。但是,即使我将其绑定到C(),仍然无法获得this
的正确值。因此,第二个警报将显示未定义,因为v2未正确初始化。
答案 0 :(得分:1)
P.bind()
会返回一个功能,您需要再次将其分配给P
。喜欢这个
P = P.bind(this, p1, p2)
但在这种情况下,我建议你只使用P.call(this, p1, p2);
function P(p1, p2) {
alert(this);
this.v1 = p1;
this.v2 = p2;
}
var middleObj = function() {};
middleObj.prototype = P.prototype;
var C = function(p1, p2) {
P.call(this, p1, p2);
}
C.prototype = new middleObj();
C.prototype.constructor = C;
var objChild = new C(1,2);
alert(objChild instanceof P);
alert(objChild.v2);