2016-04-22 6 views
3

すべてのオブジェクトのプロパティを指定せずにオブジェクトをデストラクションする洗練されたソリューションはありますか?プロパティを指定せずにオブジェクトを破棄する

普及している演算子を使用することが可能かどうか疑問に思っていましたが、オブジェクトが配列ではないため不可能です。

私は変数を盲目的に宣言するのは悪い考えだと思うかもしれませんが、これは非常に大きなオブジェクトには便利だと思います。

+0

あなたは正確に何をしようとしていますか? 'with '構造はそれを行うことができますが、私は実際にはさまざまな理由でそれを推奨しません。破壊は、「問題」を解決するために部分的に実施された。それ以外の場合は、ES7にObject spread/rest proposalがあります。https://github.com/sebmarkbage/ecmascript-rest-spreadただし、拡散は非構造化ではありません。 – nils

+1

これで達成するものと、あなたが「保存する」と考えるものを考えてみましょう。以下で使用できる多くの変数がありますが、宣言を「保存」します。それは何の目的ですか?あなたがそれらを使用し始めるときにdestructured割り当てにプロパティを追加するほうが良いのではないでしょうか?あなたのコードはよりきれいに見え、役に立たない変数は宣言されません。また、コード内の多くのプロパティを読み込み/変更する必要がある非常に大きなオブジェクトを持っている場合は、私にとっては嫌です。 – Esteban

答えて

7

これは許さwith(){}建設するものである:

var obj = {a: 1}; 
with (obj) { 
    console.log(a); 
} 

この構築物は、しかし、それはいくつかの大きな欠点を持っているので、厳しくは、(それがstrictモードではエラーがスローされます)落胆し、基本的には非推奨です

  • あなたのコードは分かりにくいので、読みにくい1)外側スコープからの変数2)ローカル変数3)オブジェクトから来るプロパティ。

  • JavaScriptエンジンは変数がどこから来ているのかわからないため、コードを最適化することはできません。

  • あなたのコードは、あなたのobjにプロパティを導入した場合ので、それはいくつかの既存のローカル変数、exemple影かもしれない、リファクタリングすることは非常に困難です。


var obj = {}; 
var a = 1; 
addSomeProperties(obj); 
with (obj) { 
    console.log(a); // the result here depends on whether or not "addSomeProperties" puts a property named "a" on "obj" 
} 

TL ; DR版:あなたは本当にこれが欲しくない、それはあなたのコードが脆い、難読化する&リファクタリングを行います。 「通常の」構造化構文を使用して、分割したい部分を選択するだけです。

+2

* "この構成は厳しく推奨されておらず、基本的に非難されています" *厳密なモードでもエラーが発生します。 –

+0

@FelixKlingありがとう、編集済み! – Ven

関連する問題