Javascript:何时和何时不使用";这";
我很好奇什么时候需要/最佳实践来使用关键字Javascript:何时和何时不使用";这";,javascript,function,scope,this,Javascript,Function,Scope,This,我很好奇什么时候需要/最佳实践来使用关键字this。我知道在确定函数此值时使用此值,但是否总是需要它 我问这个问题的原因是因为我有一个内部函数,它在我的模块中被调用,它真正做的就是对传递给它的一些数据进行排序。我的问题是我应该使用this关键字调用此函数还是单独调用 例如: 我知道函数被调用的上下文以及它的目的在回答问题时很重要,但是在这种情况下,就像我提到的,我真的不需要在任何时候访问这个对象。在调用函数时使用它仍然是一种好的做法吗? 我要问的不是“这个”是如何工作的,而是什么时候使用它合适,
this
。我知道在确定函数此值时使用此
值,但是否总是需要它
我问这个问题的原因是因为我有一个内部函数,它在我的模块中被调用,它真正做的就是对传递给它的一些数据进行排序。我的问题是我应该使用this
关键字调用此函数还是单独调用
例如:
我知道函数被调用的上下文以及它的目的在回答问题时很重要,但是在这种情况下,就像我提到的,我真的不需要在任何时候访问这个
对象。在调用函数时使用它仍然是一种好的做法吗?
我要问的不是“这个”是如何工作的,而是什么时候使用它合适,什么时候不合适
需要/最佳实践时使用关键字this
这通常在您希望访问某些应用程序中的某些内容时使用。例如,如果您有一个自定义对象,并且希望在某个方法中使用某些属性,那么应该使用this
职能人员(fname,lname){
this.fname=fname;
this.lname=lname;
this.fullName=函数(){
返回this.fname+“”+this.lname;
}
}
var p=新人(‘foo’、‘bar’);
log(p.fullName())
对于一个刚起步的JS开发人员来说,在事件侦听器回调中使用它可能最容易理解这个概念。也就是说,“点击”事件将这个绑定到目标对象(比如“看,我点击了这个!”)
第1项
第2项
第3项
让listItems=document.getElementById(“myList”).childNodes;
[…listItems].forEach(函数(项){
item.addEventListener(“单击”,RemoveListener,false);
})
//事件的回调,使用
函数removeListItem(){
//将的文本内容记录到控制台。哪一个?这一个。
console.log(this.textContent);
//获取什么的父对象?这个!并移除它的子对象。哪一个?这个!
this.parentNode.removeChild(this);
}
当然,Rajesh的答案要复杂得多,但我希望这也能有所帮助……“THIS”用于函数内部,它包含调用函数的对象的值
例如:
function a(){
this.newVariable = 'Phil';
}
a();
console.log(newVariable); //This line would display Phil
在这种情况下,即使我们只是在函数a()中定义newVariable。调用函数的对象是全局对象窗口,因此“this”指向窗口,而this.newVariable位于全局范围
另一个例子是:
var c={
log:function(){
this.name = 'Phil';
}
}
在本例中,“this”指向对象c,因为log函数将由c调用
在Javascript中使用对象“this”时,我们遇到了更棘手的情况。这篇文章很好地理解了这个概念:编程是一种表达事物的方式,这样计算机和人类就可以理解它们
在调用函数时使用它仍然是一种好的做法吗
没有确切的答案。您的两个代码片段都可以工作。所以计算机能够理解它。然而,第二个问题可能会让人类(也就是你的同事)感到困惑:
此
应指什么?是的,从技术上讲,它指的是窗口
,但从人的角度来看,它并不清楚。
这就是为什么我在本例中明确不提及此。但是,它还有其他好的用例:
function changeColor(){
//When just looking here it makes no sense to refer to this
this.color = "green";
}
const car = { color: "grey" };
//But now it makes sense as `this` refers to the `car` it is called on
car.changeColor = changeColor;
TLDR:使用
this
引用方法/属性,在引用纯函数和变量时将其忽略。如果它是某种方法
,这意味着函数以某种方式与对象直接相关,那么使用this
是一个很好的设计决策。否则,this.formatSomeData(数据)不可能重复代码>在您的情况下不起作用,因此答案是obvious@JonasW. 可能吧。在非严格模式下,此
将指向窗口
,任何不在函数中的声明都将是全局范围的一部分。@rajesh“在非严格模式下”。。。在这里谈论不良做法……这明确地概括了这一点的技术要点。干得好:)(很高兴提到我)乔纳斯,谢谢@菲尔迪梅斯基很乐意帮忙!
var c={
log:function(){
this.name = 'Phil';
}
}
this.someFunc();
function changeColor(){
//When just looking here it makes no sense to refer to this
this.color = "green";
}
const car = { color: "grey" };
//But now it makes sense as `this` refers to the `car` it is called on
car.changeColor = changeColor;