函数上下文与赋值为变量 [duplicate] 的函数不同

Function context is different to function assigned as variable [duplicate]

提问人:david 提问时间:6/2/2023 最后编辑:Mark Rotteveeldavid 更新时间:6/2/2023 访问量:27

问:

这个问题在这里已经有答案了:
6个月前关闭。

这篇文章在 6 个月前被编辑并提交审核,但未能重新打开帖子:

原始关闭原因未解决

我看到几个关于回调的问题:显然,这里不涉及回调,我正在努力查看之前任何答案的相关性。我不怀疑有一定的相关性,只是前面的答案都没有解释或证明这种相关性。

需要明确的是:我不知道使用过程变量重命名函数如何改变上下文。如果我正在实现回调,那将是显而易见的,但我不是:我没有通过使用回调移动到对不同对象的调用,而且我不知道新上下文是什么,或者它如何或为什么改变。

我有一个函数:

export default class Popup {
  shower(label, value, valueList, saveEvent) {
    let classInstance = this;
    let domObjects = [ classInstance.dom.text(label, "p") ];
  }
}

这样称呼:

export default class Controller {
  constructor(model, view) {
    this.model = model;
    this.view = view;
  }

function fred(void){
    fn=this.view.popup.shower;
    fn(label, stat.value, lst, myOtherfn); 

}

..但这行不通。如果失败,因为以这种方式调用时,有一些未定义的内容

classInstance.dom.text(label, "p") 

(当从与普通呼叫完全相同的位置调用时,它可以正常工作)

function fred(void){
    this.view.popup.shower(label, stat.value, lst, myOtherfn); 
}

我对javascript的了解还不够,甚至没有危险。dom.text(“mytext”是什么意思 , “p”) 是什么意思?显然我从两个调用方法中得到了不同的this.dom?我怎样才能以一种不干扰上下文的方式使用可变过程?

javascript dom 这个

评论

0赞 Bergi 6/2/2023
this称为“上下文”,而不是“范围”
0赞 david 6/2/2023
@Bergi谢谢。至少学到了一件事:)我已经纠正了这个问题。但是,看起来无论如何我都无法提出这个问题。

答: 暂无答案