获取在JavaScript中调用父方法的孩子

时间:2014-10-30 15:38:50

标签: javascript design-patterns

说我得到了这个JS代码

function Parent(){}
Parent.prototype.do = function(){ // Get here the Child(1|2)'s class name }

function Child1(){}
Child.prototype = new Parent();

function Child2(){}
Grandson.prototype = new Parent();

Child1.do();
Child2.do();

我知道参数中有一个(目前已弃用的)“来电者”信息。

如何做到这一点? 这是在JavaScript中做事的常见模式,还是反模式?通常如何做这种类型的东西?

1 个答案:

答案 0 :(得分:0)

您可以重置子原型对象的constructor属性,并在do函数中访问此属性:

function Parent(){}
Parent.prototype.do = function(){ 
    var name = this.constructor.toString().match(/function ([^(]+)/)[1];
    console.log(name);
}

function Child1(){}
Child1.prototype = new Parent();
Child1.prototype.constructor = Child1;

function Child2(){}
Child2.prototype = new Parent();
Child2.prototype.constructor = Child2;

new Child1().do(); // logs Child1
new Child2().do(); // logs Child2

<强> DEMO

另一种方法是向子对象的原型添加一个附加属性,例如: className

function Parent(){}
Parent.prototype.do = function(){ 
    var name = this.className;
    console.log(name);
}
Parent.prototype.className = 'Parent';

function Child1(){}
Child1.prototype = new Parent();
Child1.prototype.className = 'Child1';

function Child2(){}
Child2.prototype = new Parent();
Child2.prototype.className = 'Child2';

new Child1().do(); // logs Child1
new Child2().do(); // logs Child2