在 Javascript 中将对象的方法传递给函数。这是对问题的正确解释吗?

Pass an object's method to a function in Javascript. Is this the correct interpretation of the question?

提问人:pilauria 提问时间:3/12/2022 最后编辑:T.J. Crowderpilauria 更新时间:3/12/2022 访问量:187

问:

我在接受采访时,有这样一个问题:

当对象 O 的方法 X 作为参数传递给函数 Y 时,如果 X 包含对“this”的引用并在 Y 中执行,会发生什么?请提供代码示例。

此代码是否正确解释该问题?

let O = {
  name: 'John',
  age: 30,
  X() {
    console.log(this.name);
  },
};
let generic = O.X();

function Y(param) {
  return param;
}
console.log(Y(generic));

你能帮我理解和回答这个问题吗,即使只是一个例子?

javascript 对象 方法 参数 this

评论

0赞 T.J. Crowder 3/12/2022
“......并在 Y 内部被处决?因此,提问者并不真正理解 JavaScript,那么,既然它在哪里执行并不重要,那么如何执行并不重要。

答:

0赞 N.K. 3/12/2022 #1

let O = {
  name: 'John',
  age: 30,
  X() {
    console.log(this.name);
  },
};
let generic = O.X;

function Y(fn) {
  return fn(); // <-- execute here
}
console.log(Y(generic));

1赞 CertainPerformance 3/12/2022 #2

该问题询问函数是否被传递,而不是函数是否立即被调用,然后传递。他们可能在想这样的事情:

let O = {
  name: 'John',
  age: 30,
  X() {
    console.log(this.name);
  },
};
function callbackInvoker(fn) {
  fn();
}
callbackInvoker(O.X);

正如你所看到的,除非传递的方法首先被绑定,或者是一个箭头函数,否则它与对象的绑定将丢失,这可能是问题想要测试的内容。thisO