2014-10-30 78 views
0
方法孩子

說我得到了這個JS代碼獲取誰叫父母在JavaScript

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

最好是使用Object.create來設置Child的原型而不是創建Parent的實例。 http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR 2014-10-30 23:35:45

+0

明白了,謝謝。 – Michael 2014-10-31 10:24:42

回答

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 
+0

對不起,我的錯。我修好了它。 – friedi 2014-10-30 16:17:54

+0

好吧,我想沒有其他的方法可以做到。Thx! – Michael 2014-10-31 10:25:13