0

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

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

我只想让我的对象的一个​​属性获得一个函数返回的值,但是这个函数需要使用当前对象的其他属性,所以我必须给函数对象本身。

但是,有没有更好的方法来做到这一点?

4

1 回答 1

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);

较旧的浏览器将需要 polyfill。jQuery 有一个:

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

或者您可以编写自己的:

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

然后使用.bind第一个示例中的语法。

于 2012-11-10T14:56:51.533 回答