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