我是面向对象 JS 的新手,我想知道是否有更好的方法来做到这一点:
this.aProperty = function(myCurrentInstance){ some code }(this);
我只想让我的对象的一个属性获得一个函数返回的值,但是这个函数需要使用当前对象的其他属性,所以我必须给函数对象本身。
但是,有没有更好的方法来做到这一点?
我是面向对象 JS 的新手,我想知道是否有更好的方法来做到这一点:
this.aProperty = function(myCurrentInstance){ some code }(this);
我只想让我的对象的一个属性获得一个函数返回的值,但是这个函数需要使用当前对象的其他属性,所以我必须给函数对象本身。
但是,有没有更好的方法来做到这一点?
函数作用域是 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
第一个示例中的语法。