2011-07-10 2 views
1

オブジェクトにはObject.toStringがあります。これはどのオブジェクトでも呼び出せるメソッドです。プロパティリストを反復するか、console.log(obj)を実行するだけで、toStringがオブジェクトのプロパティとして表示されることはありません。それは隠されています。Object primativeにメソッドを追加しますが、プロパティとして表示されません。

Object.prototype.myMethodを使用してObjectプリミティブに新しいメソッドを追加したいとします。しかし、私はオブジェクトを反復するたびにそれが出てくることは望ましくありません。私はそれを隠したい。

どうすればいいですか?

答えて

2

あなたはECMAScriptの5のdefineProperty[docs]でそれを行うことができます。

Object.defineProperty(Object.prototype, 'myMethod', { 
    value: function() { 
     // your function 
    }, 
    enumerable: false // default is already `false` 
}); 

明らかにこれは、ES5(特にIE8およびそれ以前)をサポートしていないブラウザでは動作しません。

+0

それで 'Object.toString()'は言語の特別な機能ですか? – Mrchief

+0

@Murchief:あなたが特別なことを意味するかどうかにかかっています。これは仕様書で定義されている方法です:http://ecma262-5.com/ELS5_HTML.htm#Section_15.2.4.2 –

+0

ES5以前は、これはあなた自身で行うことができないという点で特別です、それは言語で焼かれる。 – Mrchief

関連する問題