正方形のブラケット表記付きの「with」スコープとプロパティ
-
24-10-2019 - |
質問
「with」ステートメント内にある場合、正方形のブラケット表記でのみアクセスできるオブジェクトプロパティにアクセスすることは可能ですか?
例:
var o = { "bad-property": 1, "another:bad:property": 2, "goodProperty": 3 };
with(o) {
console.log(goodProperty); // works awesome
console.log(???) // how to access "bad:property"?
}
解決
うわー、これは古いですが、ここの答えは間違っています。実際、あなたが尋ねるとおりに行う方法があります。
with({'!@#$%': 'omg', d: 'hai'}) {
console.log(d); //hai - naturally
console.log(valueOf()['!@#$%']); //omg - OMG
}
あなたはそれを見ましたか? valueof() 魔法の言葉です。親オブジェクトのプリミティブ値、またはオブジェクトにプリミティブ値がない場合、オブジェクト自体を返します。すべてのオブジェクトとオブジェクトのような原始は、この方法を継承します。 Object.prototype
. 。だから...そこに行く。
他のヒント
通常、キーワードを使用して、単一のオブジェクト参照ではなく、長い名前空間を解決するために使用されます。ここでキーワードを使用する意図が何であるかを知る必要があると思います。構文パーサーがあなたを逃がすとは思わない o.bad:property
, 、それは基本的にでコード化されているものです。
場合 o
この例のオブジェクトは、より長い名前空間への近道でした。私の推奨事項は、解像度で1つのオブジェクトを短くしてから、このような文字列にプロパティに入れることです...
var nmSpace = new Object();
nmSpace.o = { "bad:property": 1, "goodProperty": 2 };
with (nmSpace) {
alert(o['goodProperty']); // works awesome
alert(o['bad:property']); // now accesses "bad:property"!
}
それが役立つことを願っています。
私が理解しているように、(o)は基本的にOの範囲にジャンプするので、プロパティはそれぞれ「悪い」と「グッドプロパティ」という名前でアクセスできます。
with(o) {
bad="new value";
goodProperty=22;
}
所属していません StackOverflow