JavaScript - 引用其字段的对象函数

时间:2011-09-08 20:37:59

标签: javascript javascript-objects

这是我的代码的(非常)简化版本:

    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。那也失败了。

这些功能应该是什么样的?

2 个答案:

答案 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);
}