需要一个关于OO JS的建议

时间:2012-11-10 14:50:21

标签: javascript jquery oop

我是面向对象JS的新手,我想知道是否有更好的方法来做到这一点:

this.aProperty = function(myCurrentInstance){ some code }(this);

我只是希望我的对象的属性获取函数返回的值,但是这个函数需要使用当前对象的其他属性,所以我必须给函数本身提供。

但是,有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

功能范围是OOJS中更棘手的问题之一!关键是要记住一个对象方法只是一个函数被指定为一个对象的属性,所以如果它没有被仔细调用(例如它作为一个回调传递给某些东西)那么它可以运行在错误的上下文中,正如您所发现的那样,错误的事物与this绑定在一起。

请记住:

var someObj = {
    someMethod: function() {

    }
}

someObj.someMethod(); // in someMethod, this will be someObj

var someRef = someObj.someMethod;
someRef(); // the function will now run with this bound to the window object, which you probably don't want

如果必须传递引用,则可以绑定该函数。在现代浏览器中,您可以使用Function.prototype.bind

this.aProperty = (function() {}).bind(this);

较旧的浏览器需要填充。 jQuery有一个:

this.aProperty = $.proxy(function() {    }, this);

或者你可以写自己的:

Function.prototype.bind = function(scope) {
    var fn = this;
    return function() {
        fn.apply(scope, arguments);
    }
}

然后像第一个示例一样使用.bind语法。