0

MDNから:

使用withは推奨されておらず、ECMAScript 5 厳格モードでは禁止されています。推奨される代替方法は、一時変数にアクセスするプロパティを持つオブジェクトを割り当てることです。

素晴らしい/便利な/便利な機能のようです。なぜそれは眉をひそめているのですか?その効果を達成するために他にどのような方法がありますか? 私は行きたくない:

veryLongNS.y = veryLongNS.myFunc(veryLongNS.x);
veryLongNS.z = 6;
veryLongNS.otherFunc();
veryLongNS.a = {
    a:1,
    b:2,
    c:veryLongNS.processThree(3)
};
4

1 に答える 1

5

関連する回答は次のとおり です。JavaScript の "with" ステートメントの正当な用途はありますか?

また: http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/

代替品として以下はいかがでしょうか?

(function(obj) {
    obj.y = obj.myFunc(obj.x);
    obj.z = 6;
    obj.otherFunc();
    obj.a = {a:1,b:2,c:obj.processThree(3)};
})(myAwkwardlyNamedObjectToBeUsedAsANameSpaceThatIWishToModifyAndNotJustRead);

編集:明確さと後世のために、これも可能です(ほとんどの場合、上記よりも優先されます-グローバルスコープで行うことはお勧めしませんが、グローバルスコープで何かを行うことはお勧めしませ) :

function someFunction() {
    // in some function
    var obj = myAwkwardlyNamedObjectToBeUsedAsANameSpaceThatIWishToModifyAndNotJustRead;
    obj.y = obj.myFunc(obj.x);
    obj.z = 6;
    obj.otherFunc();
    obj.a = {a:1,b:2,c:obj.processThree(3)};
    // ... any other stuff in the function
}
于 2012-09-12T04:41:51.970 に答える