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