在 javascript 中捕获“'this”
capturing "'this" in javascript
我从在线资源创建了一个链 API,我理解它,除了一件事,我将 "this" 存储在一个变量中 - 为什么?我听说它捕获它以保护它,我不完全确定那是什么意思。为什么我要保护 "this" 以及为什么我将它存储在一个变量中,将它存储在一个变量中有什么作用?这如何改变 "this"?我在这里和 google 上进行了快速搜索,但没有找到答案。谢谢
function Calc(value){
let self= this;//captures this?
self.value=value;//sets the initial value;
self.add=function(addVal){
self.value+=addVal;
return self;
}
self.sub=function(subVal){
self.value-=subVal;
return self;
}
self.mult=function(multVal){
self.value*= multVal;
return self;
}
self.div=function(subVal){
self.value/= subVal;
return self;
}
}
let cal= new Calc(10);
cal.add(2).mult(2).sub(2).div(2);
你并不是真的存储 this
在一个变量中,你只是将引用存储到this context variable
在变量中。这很好但很重要的区别。
你为什么这样做?那么,this
是一个动态引用,它总是引用当前的 上下文 。例如,如果您调用一个新函数,则会创建一个新的 context(或者更准确地说是一个 Environment Record)。
因此,如果您不存储来自外部上下文 function Calc
的引用,则无法在子上下文 (add, sub, mult, div
) 中访问它,因为每个子上下文都有自己的 this
参考。
我从在线资源创建了一个链 API,我理解它,除了一件事,我将 "this" 存储在一个变量中 - 为什么?我听说它捕获它以保护它,我不完全确定那是什么意思。为什么我要保护 "this" 以及为什么我将它存储在一个变量中,将它存储在一个变量中有什么作用?这如何改变 "this"?我在这里和 google 上进行了快速搜索,但没有找到答案。谢谢
function Calc(value){
let self= this;//captures this?
self.value=value;//sets the initial value;
self.add=function(addVal){
self.value+=addVal;
return self;
}
self.sub=function(subVal){
self.value-=subVal;
return self;
}
self.mult=function(multVal){
self.value*= multVal;
return self;
}
self.div=function(subVal){
self.value/= subVal;
return self;
}
}
let cal= new Calc(10);
cal.add(2).mult(2).sub(2).div(2);
你并不是真的存储 this
在一个变量中,你只是将引用存储到this context variable
在变量中。这很好但很重要的区别。
你为什么这样做?那么,this
是一个动态引用,它总是引用当前的 上下文 。例如,如果您调用一个新函数,则会创建一个新的 context(或者更准确地说是一个 Environment Record)。
因此,如果您不存储来自外部上下文 function Calc
的引用,则无法在子上下文 (add, sub, mult, div
) 中访问它,因为每个子上下文都有自己的 this
参考。