在父函数方法中获取子函数名称

时间:2013-04-25 12:28:10

标签: javascript

当我在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();

2 个答案:

答案 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;