查找回调函数的父对象

Mil*_*uzz 3 javascript oop callback this

我有一个功能:

myObject.myFunction = function(callback){
  callback();
}
Run Code Online (Sandbox Code Playgroud)

和一个回调

randomObject.callBack = function(){
  console.log(this);
}
Run Code Online (Sandbox Code Playgroud)

如果我randomObject.callBack()直接调用,我在控制台中获取父对象.但是,如果我调用myObject.myFunction(randomObject.callBack)它,它会记录一个DOM元素.

如何访问父对象?


注意

我不知道运行时之前回调父对象的名称.

lon*_*day 5

对象的上下文(即this值)在函数运行时确定,而不是在定义时确定.传递randomObject.callBack给另一个函数不会发送上下文(该randomObject位); 它只是发送功能.

大概是在myFunction调用它时设置上下文.由于您未明确提供上下文(例如with callapply),因此上下文将成为window对象.

您可以通过在运行之前明确说明函数的上下文应该更改它.您可以使用以下bind方法执行此操作:

myObject.myFunction(randomObject.callBack.bind(randomObject))
Run Code Online (Sandbox Code Playgroud)

现在当你callback在里面打电话时myFunction,randomObject会被记录下来.

请注意,这bind是相对较新的; 并非所有浏览器都支持它.我上面链接的MDN页面有一些代码可以在所有浏览器中使用.