var foo = {
x: 1,
y: (function () {
return ++this.x;
})()
};
console.log(foo.y); // undefined rather than 2
让我们说我希望能够在不使用foo.y()的情况下引用foo.y。这可能吗?
以上显然不起作用,我假设这是因为闭包引用了另一个 this 。
答案 0 :(得分:6)
如果你想将y作为属性而不是函数访问,并让它返回foo.x的当前值,我能想到的唯一方法就是使用getter / setter,这是ES5规范的一部分,并且在大多数现代浏览器中采用(但如果你支持旧版浏览器,则不可用)。
var foo = {
x: 1,
get y() {
return this.x;
}
};
答案 1 :(得分:2)
您不将y声明为函数,而是作为函数调用的结果。它应该是:
var foo = {
x: 1,
y: function () {
return this.x;
}
};
或者,如果您只想分配x的值:
var foo = {
x: 1,
y: this.x
};
更新:无法生成x的同义词。声明y时,它可以是值或函数。它不能是对另一个值的引用。
答案 2 :(得分:1)
如果你不想使用y()作为函数,为什么不直接返回x?你返回一个函数的唯一原因是你实际上需要修改x的结果。
var foo = {
x: 1,
y: (function () {
return this.x;
})()};
console.log(foo.x); // 1
答案 3 :(得分:0)
foo.y
不是一个功能。 foo.y
定义为foo.x
。
答案 4 :(得分:0)
var foo = new Object();
foo.x = 1;
foo.y = function() { return this.x; };
console.log(foo.y());
或者如果您在定义foo时尝试调用y
:
var foo = new Object();
foo.x = 1;
foo.y = x;
console.log(foo.y);