当我在B子函数对象的对象上调用parentMethod()
时,函数B扩展A,如何在父函数A中获取B函数名。
function A() {
this.parentMethod = function() {
//alert('display B function name');
}
}
function B() {
}
B.prototype = new A();
var b = new B();
b.parentMethod();
答案 0 :(得分:2)
最简单的方法是:
function A() {
this.parentMethod = function() {
alert(this.constructor.name);
}
}
function B() {
}
B.prototype = new A();
B.prototype.constructor = B; //Add this line.
var b = new B();
b.parentMethod();
现在,当您调用父方法时,它将显示B作为构造函数名称。
答案 1 :(得分:0)
如果您修复constructor
属性以指向正确的功能(即B
)
B.prototype.constructor = B;
然后您可以通过
访问构造函数的名称this.parentMethod = function() {
alert(this.constructor.name);
}
请注意Function.name
is a non-standard property,但可能无法在所有浏览器中使用。另一种方法是通过覆盖parentMethod
或使用函数名称向实例添加属性来硬编码函数名。您也可以直接使用函数引用(this.constructor
),具体取决于您要实现的目标。
设置继承的更好方法是使用Object.create
[MDN]并在子构造函数中调用父构造函数:
function A() {}
A.prototype.parentMethod = function() {};
function B() {
A.call(this); // call parent constructor
}
B.prototype = Object.create(A.prototype); // establish inheritance
B.prototype.constructor = B;