人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaScriptを勉強しています。今まではJavaは書いていました。

JavaScriptには厳密にはクラスやメソッドというものはないとのことですが、下記のように書けば、Javaのようにオブジェクトを扱えると思いますが、JavaScriptとしては不自然な書き方でしょうか?

--

var Node = function(){
this.setName = function(name){
this.name = name;
}
}

var node1 = new Node();
node1.setName("node1");


●質問者: koime_ryokutya
●カテゴリ:コンピュータ インターネット
✍キーワード:Java JavaScript name オブジェクト クラス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● じゅぴたー
●34ポイント

間違ってはいませんし、classの代用をさせるのならばその書き方しかありません。

ただ、やはりclassがない処理系ですので、そういうコーディングをする人は少ないと思います。

http://nanto.asablo.jp/blog/2005/10/24/118564


2 ● chinchin-kozou
●33ポイント

・newは使わない

・prototypeを使用

http://d.hatena.ne.jp/jdg/20090706/1246840565

http://blog.tojiru.net/article/199670885.html

上記に示すような方法が一般的な手法とされてます。

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford 水野 貴明
4873113911

この本にも書かれています。


3 ● a-kuma3
●33ポイント

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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ