2016-12-29 9 views
1

だから、私は疑問に思い、このような何かを行う方法がある場合:JSオブジェクトのプロパティを定義速記

var bar = function(){ 
 
    this = { 
 
     name: 'baz', 
 
     action: function(){ 
 
      alert('bark'); 
 
     } 
 
    }; 
 
} 
 
var foo = new bar(); 
 
console.log(foo.name); 
 
foo.action();

対象:this.name = 'baz'; this.action = ...; this.etc =ようなコードの省略形解を得る、しかし、それはクラスのように定義する、ちょっと、私はデフォルトのプロパティをさらに宣言する必要はありません。

+0

私は、オブジェクトのコンストラクタである関数内でデフォルト値を定義し、あなたはここで取得しているかわからないですが、あなたがデフォルトとしてそれらを使用したい場合にしなければならないものです。返されるオブジェクトには、コンストラクタが与えたプロパティがあります。したがって、省略表現は常に存在します。私たちは特定のオブジェクトについて議論していますか?特にコンストラクタ、あるいは任意の拡張子について議論していますか? – Dellirium

+0

@Delliriumはそれがthis.'すべてのプロパティに '追加せずに、実際にコンストラクタ関数で' extension'が、ちょうど定義いくつかのプロパティではありません。私はちょうどデフォルトの匿名オブジェクトを作成し、私たちが作成するオブジェクトにそのプロパティをコピーすることができるように。私は私の考えをはっきりと記述したいと思っています。\ –

答えて

1

あなたはデフォルト値を追加するthisObject.assign()を使用することができます。

var bar = function() { 
 
    Object.assign(this, { 
 
    name: 'baz', 
 
    action: function() { 
 
     alert('bark'); 
 
    } 
 
    }) 
 
} 
 
var foo = new bar(); 
 
console.log(foo.name); 
 
foo.action();

+0

これは正しいと思います。唯一の欠点は古いブラウザの互換性です。それでもやはり意味的に正しい方法です。ありがとう –

0

Object.prototype.extend = function(obj) { 
 
     for (var i in obj) { 
 
     if (obj.hasOwnProperty(i)) { 
 
      this[i] = obj[i]; 
 
     } 
 
     } 
 
    }; 
 
    var bar = function() { 
 
     this.extend({ 
 
     name: 'baz', 
 
     action: function() { 
 
      alert('bark'); 
 
     } 
 
     }); 
 
    } 
 
    var foo = new bar(); 
 
    console.log(foo.name); 
 
    foo.action();

+0

まあ、それは素晴らしいソリューションのようなものです。 –

+0

は、ネイティブのプロトタイプを拡張奨励しないでください3''「'それが答えになる他、誰かがそれを上回ることができるかどうか、わかります、それは、災害のためのレシピです。 – zzzzBov

1

最近のブラウザはObject.assignを持っている:

var bar = function() { 
 
    Object.assign(this, { 
 
     name: 'baz', 
 
     action: function(){ 
 
      alert('bark'); 
 
     } 
 
    }); 
 
}; 
 
var foo = new bar(); 
 
console.log(foo.name); 
 
foo.action();

あなたはObject.assignを用意していない場合、あなたはassign(またはextend独自に作成することができ、またはmerge ...)機能:

function assign(obj) { 
    var objects; 

    objects = Array.prototype.slice.call(arguments, 1); 

    objects.forEach(function (object) { 
     var i; 
     for (i in object) { 
      if (Object.prototype.hasOwnProperty.call(object, i)) { 
       obj[i] = object[i]; 
      } 
     } 
    }); 

    return obj; 
} 
+0

うん、これは私が検索したものです。残念ながら、上記のユーザーは答えを早く与えました。あなたは、タイムスタンプを見ればそれでも、あなたはネナドは完全に罰金の答えを持っているので、彼は、しかし、私はそれを変更することをお勧めしたくないしなかったことをあなたの貢献 '=)' –

+0

@SLy_huhへの感謝を、参照してくださいね、 FGITWは投票を変更するひどい理由です。 – zzzzBov

関連する問題