JavaScriptには厳密にはクラスやメソッドというものはないとのことですが、下記のように書けば、Javaのようにオブジェクトを扱えると思いますが、JavaScriptとしては不自然な書き方でしょうか?
--
var Node = function(){
this.setName = function(name){
this.name = name;
}
}
var node1 = new Node();
node1.setName("node1");
間違ってはいませんし、classの代用をさせるのならばその書き方しかありません。
ただ、やはりclassがない処理系ですので、そういうコーディングをする人は少ないと思います。
・newは使わない
・prototypeを使用
http://d.hatena.ne.jp/jdg/20090706/1246840565
http://blog.tojiru.net/article/199670885.html
上記に示すような方法が一般的な手法とされてます。
JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford 水野 貴明
この本にも書かれています。
JavaScriptには厳密にはクラスやメソッドというものはないとのことですが、
ちょっと違ってて、「クラス」は無いけど、オブジェクトとメソッドはきちんと定義されてる、
って感じかな。
javascript のベースとなってる EMCAScript では、きちんと言及されてます。
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
↑の Section 4.2 とか 8.6 とかね。
で、書き方はいろいろあります。
EMCAScript の規格を作った人たちが想定してたのは、こういう書き方。
var Node = function(){ } Node.prototype.setName = function(name){ this.name = name; }
id:koime_ryokutya さんが書いたのと、ほとんど一緒なんだけど、メソッド setName のスコープがちょっと違う。
こっちの書き方は、Java なんかと同じで、メソッドに閉じたスコープか、その外(グローバル)のスコープしか無いんだけど、
質問にあるコードだと、メソッド setName のスコープは、コンストラクタのスコープになる。
Prototype.js が好きな人の流儀は、これ。
var Node = (function() { function setName(name) { this.name = name; } return { setName: setName } })()
Prototype.js を使う側の人は、こう書く。
var Node = Class.create({ initialize: function() { }, setName: function(name) { this.name = name; } });
よく分からなくても、「いろいろな流儀があるんだなあ」程度の理解で良いです。
多分、ちょっとすると、「クラスを派生したいんだけど...」となるはずで、
そのときには、最初に書いたやり方とか、質問で上げてる書き方だと、
多分、壁にぶち当たるはずで、そのときに後の方の書き方の意味が分かってくるはずだから。
コメント(0件)