在JavaScript中,“ this”运算符可以在不同情况下引用不同的事物。
通常,在JavaScript“对象”内的方法中,它引用当前对象。
但是当用作回调时,它成为对调用对象的引用。
我发现这会在代码中引起问题,因为如果您在JavaScript“对象”中使用方法作为回调函数,则无法确定“ this”是指当前的“ object”还是“ this”是指当前对象。调用对象。
有人可以澄清有关如何解决此问题的用法和最佳实践吗?
function TestObject() { TestObject.prototype.firstMethod = function(){ this.callback(); YAHOO.util.Connect.asyncRequest(method, uri, callBack); } TestObject.prototype.callBack = function(o){ // do something with "this" //when method is called directly, "this" resolves to the current object //when invoked by the asyncRequest callback, "this" is not the current object //what design patterns can make this consistent? this.secondMethod(); } TestObject.prototype.secondMethod = function() { alert('test'); } }
在JavaScript中,this总是指调用正在执行的功能的对象。因此,如果将该函数用作事件处理程序,this则将引用激发该事件的节点。但是,如果您有一个对象并在其上调用一个函数,例如:
this
myObject.myFunction();
然后this里面myFunction会参考myObject。是否有意义?
myFunction
myObject
为了解决这个问题,您需要使用闭包。您可以按以下方式更改代码:
function TestObject() { TestObject.prototype.firstMethod = function(){ this.callback(); YAHOO.util.Connect.asyncRequest(method, uri, callBack); } var that = this; TestObject.prototype.callBack = function(o){ that.secondMethod(); } TestObject.prototype.secondMethod = function() { alert('test'); } }