2009-10-07 12 views
11

W pythonie można zdefiniować obiekt posiadający metodę __getattr__(self,key), aby obsłużyć wszystkie nieznane atrybuty, które mają być rozwiązywane w sposób programistyczny, ale w javascript można zdefiniować tylko moduły pobierające i ustawiające dla predefiniowanych atrybutów. Czy istnieje ogólny sposób na wykonanie poprzedniej czynności również w javascript?Czy istnieje odpowiednik javascript metody __getattr__ python?

Przykładowy kod będzie smth jak:

function X() {}; 
X.prototype={ 
    __getattr__:function(attrname) { 
    return "Value for attribute '"+attrname+"'"; 
    } 
} 

x=new X() 
alert(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'" 

Kluczowy punkt jest coraz wartość atrybutu programowo w zależności od nazwy atrybutu. Atrybut wstępnego ustawienia nie pomaga, ponieważ podczas init nie ma informacji, jakie atrybuty mogą być wymagane.

Odpowiedz

8

Niestety odpowiedź brzmi: Nie. Zobacz Python's __getattr__ in Javascript

Masz __defineGetter__, ale jak zauważył, trzeba znać nazwę atrybutu będzie korzystającego.

Przy okazji, myślę, że miałeś na myśli __getattr__ (__getitem__ jest dla rzeczy, które chcesz uzyskać dostęp z []).

+0

dzięki. tak, to byłoby raczej __getattr__ –

+3

@Roatin DLACZEGO !!!! JS potrzebuje tego bardziej niż jakakolwiek inna funkcja (z wyjątkiem funkcji "mniej ssania", o którą ludzie prosili od dekady). – orokusaki

22

Jest to teraz możliwe, jeśli Twoja przeglądarka obsługuje funkcję proxy ES6. Możesz to sprawdzić w ECMAScript 6 compatibility table.

Jeśli masz wsparcie proxy, należy użyć go w następujący sposób:

let handler = { 
    get(target,name) { 
    return `Value for attribute ${name}` 
    } 
} 

let x = new Proxy({},handler); 
console.log(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'" 

działa w Chrome, Firefox i node.js. Wady: nie działa w IE - freakin IE. Wkrótce.

+0

Święte bzdury, na które czekałem !!! –

Powiązane problemy