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


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

--

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/08/17 23:20:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Jupiter2100 No.1

回答回数444ベストアンサー獲得回数74

ポイント34pt

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

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

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

id:chinchin-kozou No.2

回答回数198ベストアンサー獲得回数7

ポイント33pt

・newは使わない

・prototypeを使用

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

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

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

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

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

id:a-kuma3 No.3

回答回数4973ベストアンサー獲得回数2154

ポイント33pt

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;
    }
});

よく分からなくても、「いろいろな流儀があるんだなあ」程度の理解で良いです。

多分、ちょっとすると、「クラスを派生したいんだけど...」となるはずで、

そのときには、最初に書いたやり方とか、質問で上げてる書き方だと、

多分、壁にぶち当たるはずで、そのときに後の方の書き方の意味が分かってくるはずだから。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません