Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Javascript 为什么我会在这段代码中失去上下文?_Javascript_Typescript - Fatal编程技术网

Javascript 为什么我会在这段代码中失去上下文?

Javascript 为什么我会在这段代码中失去上下文?,javascript,typescript,Javascript,Typescript,下面是使用spread运算符时丢失上下文的代码 看看函数“decorator”。当我丢失上下文时,行被标记为“错误” 据我所知,originDesc(…args)equalsoriginDesc.apply(这是参数)那么为什么我的上下文丢失了?这是因为您设置了: let originDesc = desc.value; // This is where you loose context 然后调用originDesc。这与此处描述的情况完全相同: 另外,originDesc(…args)编译

下面是使用spread运算符时丢失上下文的代码

看看函数“decorator”。当我丢失上下文时,行被标记为“错误”


据我所知,
originDesc(…args)
equals
originDesc.apply(这是参数)那么为什么我的上下文丢失了?

这是因为您设置了:

let originDesc = desc.value; // This is where you loose context
然后调用
originDesc
。这与此处描述的情况完全相同:

另外,
originDesc(…args)
编译成
originDesc.apply(void 0,args)
。(
void
因为它没有绑定上下文,所以可以对其进行测试)

据我所知,originDesc(…args);等于originDesc.apply(这是参数);那么,为什么上下文丢失了呢

不,没有。它相当于
originDesc(args[0]、args[1]、/*etc.*/)
,它使用默认的
this
(全局对象在松散模式下,
在严格模式下未定义)

在该代码中,您需要使用
。apply

originDesc.apply(appropriateThisValueHere, args);
。呼叫

originDesc.call(appropriateThisValueHere, ...args);
根据代码中的这一注释:

propertizethisvalue
将是
this
,因此:

originDesc.apply(this, args);

 //return originDesc.apply(this, arguments); // ==> all OK
originDesc.apply(this, args);
originDesc.call(this, ...args);