Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不是';t';这';在Javascript中,在本例中是否没有更改?_Javascript_This - Fatal编程技术网

为什么不是';t';这';在Javascript中,在本例中是否没有更改?

为什么不是';t';这';在Javascript中,在本例中是否没有更改?,javascript,this,Javascript,This,我正在用Javascript测试“this”的上下文,我有一个不理解的情况 根据javascript的工作方式,我知道当对对象调用函数时,该对象会隐式地作为firest参数传入(或者在使用call方法时显式传入) 但是有两个我尝试测试的案例没有达到我的预期。请看//后面的两行为什么不起作用?为什么下面的两个值没有定义 下面是a中的代码(也粘贴在下面) 编辑:多亏了昆汀、德斯特罗伊和鲁阿的回答,我必须显示上下文恢复到窗口对象时生成的值 下面是回调。调用(this)修复了我遇到的问题 这不应该显示b

我正在用Javascript测试“this”的上下文,我有一个不理解的情况

根据javascript的工作方式,我知道当对对象调用函数时,该对象会隐式地作为firest参数传入(或者在使用
call
方法时显式传入)

但是有两个我尝试测试的案例没有达到我的预期。请看//后面的两行为什么不起作用?为什么下面的两个值没有定义

下面是a中的代码(也粘贴在下面)

编辑:多亏了昆汀、德斯特罗伊和鲁阿的回答,我必须显示上下文恢复到窗口对象时生成的值

下面是
回调。调用(this)
修复了我遇到的问题

这不应该显示b中的值吗

您正在调用(在
b
的上下文中)一个与
this
无关的函数。该函数在
窗口
(默认对象)的上下文中调用
回调
(它是
a.showVal
)的副本)

这不应该显示b中的值吗


您正在调用(在
b
的上下文中)一个与
this
无关的函数。该函数在
窗口
(默认对象)的上下文中调用
回调
(它是
a.showVal
的副本)。

您忘记了
运行回调
定义中的一步:

替换

callback();


您忘记了
RunCallback
定义中的一个步骤:

替换

callback();


我认为您的问题是,当您调用
回调
时,您没有传递上下文,因此您正在丢失
。请尝试像这样更新RunCallback:

  this.RunCallback = function () {
   callback.call(this);
  }

我认为您的问题是,当您调用
回调
时,您没有传递上下文,因此您正在丢失
。请尝试像这样更新RunCallback:

  this.RunCallback = function () {
   callback.call(this);
  }

Shazzam!可以,但我仍然需要帮助理解,为什么它显示为未定义?如果没有您的修改,它运行的上下文是什么?这从来都不是未定义的。它是窗口(全局上下文)如果没有传递上下文。Shazzam!可以,但我仍然需要帮助理解,为什么它显示为未定义的?如果没有您的修改,它运行的上下文是什么?这从来都不是未定义的。它是窗口(全局上下文)如果没有传递上下文。那么,将函数作为回调的参数传递也不会在上下文中传递?即,此行:
b=new Beta(a.ShowVal,“传递的Beta属性”);
不会在a的上下文中传递。它只是
ShowVal
no的副本。上下文由函数的调用方式决定(即使用
new
、使用
call
/
apply
或在对象(
object.function()
)上使用
window
作为默认对象。(还有
bind
,我还没有仔细研究过)。感谢您的澄清,我已经用一个工作示例更新了我的问题。因此,将函数作为回调的参数传递也不会在上下文中传递?即,此行:
b=new Beta(a.ShowVal,“传递了Beta的属性”);
不会在a的上下文中传递。它只是
ShowVal
否的副本。上下文由调用函数的方式决定(即使用
new
、使用
call
/
apply
或在对象(
object.function()
)上使用
窗口作为默认对象。(还有
bind
,我还没有仔细看过)。感谢您的澄清,我已经用一个工作示例更新了我的问题