1

「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"?
}
4

3 に答える 3

2

うわー、これは古いですが、ここでの答えは間違っています。実際には、あなたが求めるとおりに行う方法があります。

with({'!@#$%': 'omg', d: 'hai'}) {
  console.log(d); //hai - naturally
  console.log(valueOf()['!@#$%']); //omg - OMG
}

あなたはそれを見ましたか?valueOf()は魔法の言葉です。親オブジェクトのプリミティブ値を返すか、オブジェクトにプリミティブ値がない場合はオブジェクト自体を返します。の組み込みプロパティであるため、すべてのオブジェクトおよびオブジェクトのようなプリミティブはこのメソッドを継承しますObject.prototype。では、どうぞ。

于 2010-09-10T19:36:26.850 に答える
1

一般に with キーワードは、単一のオブジェクト参照ではなく、長い名前空間を解決するために使用されます。ここでキーワードを使用する意図が何であるかを知る必要があると思います。o.bad:property基本的に with を使用してコード化されている.

例のoオブジェクトがより長い名前空間への単なるショートカットである場合、with を使用して解像度が短いオブジェクトを 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"!
}

それが役立つことを願っています。

于 2010-06-06T22:09:39.950 に答える
0

私が理解しているように、with(o)は基本的にoのスコープにジャンプするため、プロパティにはそれぞれ「bad」と「goodProperty」という名前でアクセスできます。

with(o) {
  bad="new value";
  goodProperty=22;
}
于 2010-06-06T21:56:50.213 に答える