2013-05-02 17 views
5

Chcę uzyskać dostęp do właściwości statycznej za pomocą instancji. Coś takiegojavascript: jak uzyskać dostęp do właściwości statycznych

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() ; 

Tutaj jest ten sam kod w jsfiddle

w mojej sytuacji nie wiem jakiej klasy instancja należy, więc próbowałem dostępu do właściwości statycznych używając instancję „konstruktor "własność, bez powodzenia :( Czy to możliwe?

+0

Nie używaj klasy słów w javascript –

+0

@Johan: W jaki sposób ten link jest powiązany z czymkolwiek tutaj? – Bergi

Odpowiedz

4

więc próbowałem dostępu do właściwości statycznych używając instancję«konstruktor»własność

To jest problem, twoje instancje nie mają właściwości constructor - nadpisałeś cały obiekt .prototype i jego domyślne właściwości. Zamiast tego należy użyć

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

I ty też może po prostu użyć User.property1 zamiast objazdem przez this.constructor. Ponadto nie można zagwarantować, że wszystkie instancje, z którymi można wywołać tę metodę, będą miały właściwość o wartości constructor, dzięki czemu będą miały lepszy dostęp do niej bezpośrednio i jawnie.

+0

Jak uzyskać dostęp do właściwości statycznej spoza konstruktora, a nawet metody statycznej? –

+2

@AlanKis: Bezpośrednio na konstruktorze, tutaj na przykład 'User.property1'. – Bergi

+0

Dokładnie, głupi. –

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

Być może trzeba spojrzeć na: http://jsfiddle.net/etm2d/

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

wydaje się być problematyczne, choć jeszcze nie zorientowali się, dlaczego.

Powiązane problemy