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;第二个替换this为您需要的一切。

于 2013-08-23T02:47:14.580 回答