2009-10-07 25 views
11

Pythonでは、未知の属性をプログラム的に解くことができるように、__getattr__(self,key)メソッドを持つオブジェクトを定義できますが、javascriptでは事前定義された属性に対してのみgetterとsetterを定義できます。以前のことをjavascriptでもやってしまう一般的な方法はありますか?pythonの__getattr__メソッドに相当するjavascriptはありますか?

サンプルコードのようななめらかになります:

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

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

キーポイントは、属性の名前に応じて、プログラム属性の値を取得しています。プリセット属性は、initの間に要求される可能性がある情報がないために役立ちません。

答えて

8

残念ながら答えはNoはPython's __getattr__ in Javascript

あなたは__defineGetter__を持っている、しかし、あなたが述べたように、あなたがアクセスする属性の名前を知っている必要がありますを参照してくださいです。

ところで、私はあなたが__getattr____getitem__[]でアクセスしたいものです)を意味すると思うと思います。

+0

ありがとうございます。はい、むしろ__getattr__になります –

+3

@Roatin WHY !!!! JSは他のどの機能よりもこの機能を必要としています(人々が10年以上要求してきた「吸う」機能を除く)。 – orokusaki

22

ブラウザでES6プロキシ機能がサポートされるようになりました。これはECMAScript 6 compatibility tableで確認できます。

プロキシをサポートしている場合は、次のように、あなたがそれを使用します:クロム、Firefox、およびnode.js.で

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'" 

作品不利な点:IE - freakin IEでは動作しません。すぐに。

+0

聖なるもの私はこれを待っていました!!! –

関連する問題