这是我的代码的(非常)简化版本:
function Ctor() {
this.i = 0;
this.increment = function() { this.i++; },
this.decrement = function() { this.i--; },
this.display = function() { alert(this.i); }
};
问题是,当代码运行时,在某些情况下this
现在指向别的东西。我或多或少地理解this
将上下文从一个函数更改为另一个函数,但是我的增量函数(以及其他函数)通过闭包的魔力会“记住”这应该是什么。 / p>
我试图完全消除这一点,并简单地在函数中引用i。那也失败了。
这些功能应该是什么样的?
答案 0 :(得分:3)
您无法依赖JavaScript中this
中的内容。 More on this topic
我看到你可能想要引入像OOP语言这样的私有属性。 John Resig described this issue very well。
function Field(val){
var value = val;
this.getValue = function(){
return value;
};
this.setValue = function(val){
value = val;
};
}
var field = new Field("test");
field.value
// => undefined
field.setValue("test2")
field.getValue()
// => "test2"
JavaScript与Java,C ++或PHP等传统语言的工作方式大不相同。但你可以习惯它:)
答案 1 :(得分:1)
在this
更改的情况下,您可以执行此操作:
function() { obj.display(); }
示例:
var obj = new Ctor();
function foo(fn) {
fn();
}
foo(function() {
obj.display();
});
另一种方法是修改foo()以接受执行函数的上下文,如下所示:
function foo(fn, context) {
fn.call(context);
}