function() {
var name;
this.set = function( name ) {
this.name = name; <-- this
}
}
如何编写行以便将参数分配给私有变量?与Java不同,“this”也指向一个函数,所以我无法弄明白。
答案 0 :(得分:2)
在函数 set 中,内部name
变量将获得比外部name
变量更多的偏好。为了给外部变量赋值,您必须在内部或外部使用不同的名称。
但是,您可以执行类似的操作,
function() {
this.name = '';
this.set = function( name ) {
this.name = name; <-- this
}
}
这不是将新值赋给私有变量,而是将值赋给对象的属性。
答案 1 :(得分:1)
你只需要为参数使用不同的名称,这样它就不会影响函数name
之外的私有变量set
,这就是全部。
var SomeClass = function() {
var name;
this.set = function( otherName ) { // argument should have a diffirent name so it won't shadow the other variable "name"
name = otherName;
}
this.get = function() {
return name;
}
};
var ins = new SomeClass();
ins.set("Jim Carrey"); // OK
console.log(ins.get()); // OK
console.log(ins.name); // undefined as expected
答案 2 :(得分:0)
2020编辑:
我碰巧回到这个问题,意识到我弄错了。 更好的代码示例。
type = function() {
var name = "default";
var self = this;
this.set = function(name) {
console.log("this: " + this);
console.log("self: " + self);
console.log("name: " + name);
name = name; // <-- name shadowed
}
this.get = function() {
return name;
}
}
test = new type();
console.log("test.name: " + test.name);
console.log("test.get: " + test.get());
test.set("new")
console.log("test.name: " + test.name);
console.log("test.get: " + test.get());
我想避免通过Java可以做到的名称隐藏
this.name = name;
但是,在Javascript中,“名称”被声明为公共属性并被初始化,从而违背了这种思想锻炼的目的。 “自我”技术也不起作用(这是我错误地认为它将起作用的地方)
真正的答案是Aadit M Shah在第一个答案中的评论。
使用最近的EcmaScript(或不是最近的),Javascript可让您将getter和setter分配给属性,因此可能不需要此技术。