JavaScript闭包操作

JavaScript Closures Manipulation

本文关键字:操作 闭包 JavaScript      更新时间:2023-09-26

我正在做一些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);

我不明白为什么这不起作用。

--已编辑

多亏了阿玛丹,我找到了正确的方法:

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

通过这种方式,"名称"answers"用户"被封装起来。

构造函数中的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替换为所需的一切。