2013-05-02 7 views
5

Desidero accedere a una proprietà statica utilizzando un'istanza. Qualcosa di similejavascript: come accedere alle proprietà statiche

function User(){ 
    console.log('Constructor: property1=' + this.constructor.property1) ; 
} 
User.prototype = { 
    test: function() { 
     console.log('test: property1=' + this.constructor.property1) ; 
    } 
}  
User.property1 = 10 ; // STATIC PROPERTY 

var inst = new User() ; 
inst.test() ; 

Ecco lo stesso codice in un jsfiddle

Nella mia situazione non so quale classe l'istanza di appartenenza, così ho cercato di accedere alla proprietà statiche utilizzando l'istanza 'costruttore L 'immobile, senza successo :( è possibile?

+0

non utilizzare la classe di parole in javascript –

+0

@Johan: come è collegato a qualsiasi cosa qui? – Bergi

risposta

4

così ho cercato di accedere alla proprietà statiche utilizzando l'istanza 'costruttore' proprietà

Questo è il problema, le istanze non hanno una proprietà constructor - hai sovrascritto l'intero oggetto .prototype e le sue proprietà predefinite. Invece, utilizzare

User.prototype.test = function() { 
    console.log('test: property1=' + this.constructor.property1) ; 
}; 

E si potrebbe anche semplicemente usare User.property1 invece della deviazione attraverso this.constructor. Inoltre, non è possibile garantire che tutte le istanze in cui si desideri chiamare questo metodo abbiano la loro proprietà constructor che punta a User, quindi è meglio accedervi direttamente ed esplicitamente.

+0

Come posso accedere alla proprietà statica dall'esterno del costruttore o anche dal metodo statico? –

+2

@AlanKis: direttamente sul costruttore, qui ad esempio 'User.property1'. – Bergi

+0

Esattamente, stupido. –

0
function getObjectClass(obj) { 
    if (obj && obj.constructor && obj.constructor.toString) { 
     var arr = obj.constructor.toString().match(
      /function\s*(\w+)/); 

     if (arr && arr.length == 2) { 
      return arr[1]; 
     } 
    } 

    return undefined; 
} 

function User(){ 
    console.log('Constructor: property1=' + this.constructor.property1) ; 
} 

User.property1 = 10 ; 

var inst = new User() ; 

alert(getObjectClass(inst)); 

http://jsfiddle.net/FK9VJ/2/

0

Forse si può dare un'occhiata a: http://jsfiddle.net/etm2d/

User.prototype = { 
test: function() { 
    console.log('test: property1=' + this.constructor.property1) ; 
    } 
} 

sembra essere problematico, anche se non ho ancora capito il perché.