1

私はいくつかの Node.js を実行しており、クロージャー表現を使用してオブジェクトを作成したいと考えています。このような単純なものが機能していないため、何かが足りないと思います:

var Room = function(foo) {
    this.name = foo;
    this.users= [];
    return {
        getName : function() {
            return this.name;
        }
    }
}
var room = new Room("foo");
console.log(room.getName());

私もパラメータなしで試しました..それでも動作しません。

var Room = function() {
    this.name = "foo";
    this.users= [];
    return {
        getName : function() {
            return this.name;
        }
    }
}
var room = new Room();
console.log(room.getName());

ただし、次のようなものが機能します。

var Room = function(foo) {
    this.name = foo;
    this.users= [];
}
var room = new Room("foo");
console.log(room.name);

なぜこれが機能しないのか理解できません。

--編集済み

Amadan のおかげで、正しい方法を見つけました。

var Room = function() {
    var name = "foo";
    var users= [];
    return {
        getName : function() {
            return name;
        }
    }
}
var room = new Room();
console.log(room.getName());

このようにして、「名前」と「ユーザー」がカプセル化されます。

4

1 に答える 1

4

returnコンストラクターでは上書きされますthis。したがって、これを行う正しい方法は次のとおりです。

var Room = function(foo) {
    this.name = foo;
    this.users= [];
    this.getName = function() {
        return this.name;
    }
}

また

var Room = function(foo) {
    return {
        name: "foo",
        users: [],
        getName : function() {
            return this.name;
        }
    }
}

最初のものは元のすべてを行いthisます。2 番目のものは、必要なものすべてに置き換えthisられます。

于 2013-08-23T02:47:14.580 に答える