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;