说我得到了这个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中做事的常见模式,还是反模式?通常如何做这种类型的东西?
答案 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