- ベストアンサー
JavaScriptのnew演算子について
- JavaScriptのnew演算子について質問があります。new演算子は悪いパーツと言われることがありますが、代替方法や問題点について知りたいです。
- new演算子の使用を避けたオブジェクト生成方法について考えていますが、例えば__proto__の使用を避けたコードはあり得るのでしょうか?また、new演算子が悪いと言われる理由は汚染の問題だけなのでしょうか?
- オブジェクトとプロトタイプについての理解が曖昧なため、どのように学習すればよいか教えてください。詳しい方のアドバイスをお待ちしています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
var obj = {}; obj.method = function(){ //new演算子と共に呼ばないとthisの値はobjになります //alert(this === obj); // true this.prop1 = "hoge"; // obj.prop1 = "hoge"; return this; // return obj; }; obj.method.prototype = obj.method(); // obj.method.prototype = obj; //alert(obj.method.prototype === obj); // true obj.method.prototype.prop2 = "fuga"; // obj.prop2 = "fuga"; var obj2 = obj.method(); //alert(obj2 === obj); // true //alert(obj.hasOwnProperty('prop1')); // true //alert(obj.hasOwnProperty('prop2')); // true objに直接プロパティprop1、prop2が追加されているだけですが これで理解できるでしょうか? new演算子、プロトタイプうんぬんは先ず基本的なところを抑えてから ではないかと個人的には思いますけど。 質問に関連する(と思われる)記事をいくつか読んでみました。 JavaScript: The Good Parts(存在すらしりませんでしたが良書と評判です) http://www.amazon.co.jp/gp/product/4873113911 『JavaScript:The Good Parts』を読んで http://www.kanasansoft.com/weblab/2009/04/javascriptthe_good_parts.html 『JavaScript:The Good Parts』にツッコミ http://www.kanasansoft.com/weblab/2009/04/javascriptthe_good_parts_1.html JavaScriptのnewって本当にいらない子? http://d.hatena.ne.jp/jdg/20090706 JavaScript に new 演算子は要らない http://diaspar.jp/node/224 確かにnew演算子を付け忘れても普通に関数が実行されるだけですから バグを見付けにくくやっかいかもしれないですね。 質問とは関係ないですが、関数とコンストラクタが明確に仕様で区別されていれば 普通にエラーを投げることができると思いますけど、ひと目でそれと分かる「コンストラクタ宣言」みたいなのがあってもいいような気はします。 私レベルが言えることは、それと分かる名前を付け、いちいちnew演算子を書かなくていいように 工夫することぐらいでしょうか。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
昔のjavascriptはオブジェクト一つ作るにもnewをつかったもんですけどね・・・ 理解しないままprototypeをいじる方が危険なような・・・ <script> var obj = new createObj(); alert(obj.prop1) obj.method(); alert(obj.prop1) function createObj(){ this.method=method; } function method(){ this.prop1="hoge"; } </script>
お礼
ご回答ありがとうございます。 再度勉強してみます。
お礼
なるほど、なんとな~く理解できてきたかなぁと思っていましたが、 基礎から勉強しなおしたいと思います。 サイトも参考にしてみます。 ご丁寧な回答ありがとうございました。