はい、可能です。definePropertyを使用-
Object.defineProperty(a, "dimension", {
enumerable: false,
configurable: true,
writable: true,
value: 2
});
これにより、 for..in ループで列挙されないdimension
forと呼ばれるプロパティが作成されます。a
このようなプロパティを作成するための関数を定義できます-
function defineArrayProperties(object, property, value) {
Object.defineProperty(object, property, {
enumerable: false,
configurable: true,
writable: true,
value: value
});
}
そして、次のように呼び出すことができます-
var b = [];
defineArrayProperties(b, "dimension", 3);
プロトタイプでこの関数を作成し、Array
すべての配列オブジェクトにデフォルトで継承させることもできます -
Array.prototype.defineProperty = function (property, value) {
Object.defineProperty(this, property, {
enumerable: false,
configurable: true,
writable: true,
value: value
});
};
var b = [];
b.defineProperty("dimension", 4);
alert(b.dimension); // will alert 4
ライブ フィドルは、上記の両方のアプローチを示しています。2 つの配列オブジェクトを作成し、for...in を使用してそれらのすべてのプロパティを列挙しました。dimension
for...in のいずれにも表示されないことに注意してください。
編集
Object.defineProperty
が正しく動作するには、ブラウザが ECMAScript 5 をサポートしている必要があります。