我正在做一些 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());
这样就封装了“name”和“users”。
最佳答案
构造函数中的
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
替换为您需要的所有内容。
关于JavaScript 闭包操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18393824/