让我们来看看这个对象:
var person = {
_name: "John",
name: function() {return _name}
}
在GUI中,
myTextBox.value = person.name()
将返回
"John"
但是
myTextBox.value = person.name
将返回
function() {return _name}
如何强制两种语法都返回"John"
?我可以在某种程度上使用闭包(question I asked previously)吗?
答案 0 :(得分:2)
如果您只支持现代浏览器,则可以使用ES5 Getters,但通常这是JavaScript,为什么要让它变得复杂?
您的替代方案是:
我会去#2。
我认为你在这里对这个语法感到困惑,但实际上它和你现在有同样的问题:
function Person(name) {
this._name = name;
}
Person.prototype.name = function(name) {
if (name) this._name = name;
return this._name;
}
var j = new Person("Jay");
j.name() // "Jay"
j.name("Thomas"); // I can set the value as well
j.name() // "Thomas"
您似乎正在尝试创建真正的私有变量,这些变量是可能的,但可能没那么有用。
function Person(name) {
var myName = name; // private
this.name = function() {
return myName;
}
}
var j = new Person("Jay");
j.name(); // still had to use perens
最后,因为你的只是一个简单的对象,我们可以做到这一点。不知道你为什么要这样做:
var person = {};
(function(name) {
var myName = name; // myName and name, both private, but not helpful
person = {
name = myName
}
}("Jay"))
person.name // "Jay"
答案 1 :(得分:1)
你不能!
答案 2 :(得分:1)
好的,有一个游戏,看起来这是“可能的”(至少在Chrome中),但它有点肮脏的黑客。
var person = {
_name: "John",
name: function() {return this._name;},
}
person.name.toString = function(){ return person._name; }
这将导致person.name和person.name()返回“John”。