'this'在被使用之前被分配给var?

时间:2016-05-13 00:36:25

标签: javascript

我经常看到Javascript代码,其中this被分配给一个变量,用于引用该对象的当前实例。

var me = this;
me.someproperty_or_method

为什么他们这样编码? ?这是一个更完整的代码段,

var Preload = function(game){};

Preload.prototype = {

  init: function() {
    var me = this;

    var style = {
      font: "32px Arial",
      fill: "ffffff",
      align: "center"
    };



this.text = this.add.text(me.game.world.centerX, me.game.world.centerY, "Loading: 0%", style);
    this.text.anchor.x = 0.5;
  }

  preload: function(){ 
    this.game.load.text('dictionary', 'assets/dictionary.txt');

  },

  create: function(){
    this.game.state.start("Main");
  }
}

我很确定这不是重复,其他帖子上给出的答案不是确定的。

3 个答案:

答案 0 :(得分:2)

ASAutoResizingTextView与函数的执行上下文有关,这是在执行函数期间确定的值,具体取决于函数的调用方式。

对于嵌套函数,您可能希望访问外部函数的this而不是内部函数中的this。将其分配给变量,内部函数可以访问外部函数this

this

function foo(){ var foosThis = this; function bar(){ var barsThis = this; // `this` is bar's `this` which is null. // You can't access foo's `this` via `this` // But you can access foo's `this` via foosThis } // Call bar with null as context bar.call(null); } // Call foo with an object as context foo.call({}); 只是函数上下文可以改变的众多方法之一。

答案 1 :(得分:1)

它通常用于举办另一个背景。如果要将另一个上下文传递到另一个块,可以使用bind()。例如:

function People() {
    // current `this` is context of `People`
    var I = this;

    var beHappy = function () {
        // current `this` is context of `beHappy`
        var me = this;

        console.log("=== beHappy()");
        console.log("I and me =",    (I === me));    // false
        console.log("this and me =", (this === me)); // true
    };

    var beSad = function () {
        // current `this` is context of `beSad`
        var me = this;

        console.log("=== beSad()");
        console.log("I and me =",    (I === me));    // true
        console.log("this and me =", (this === me)); // true
    }.bind(this);

    var beSleepy = function () {
        console.log("=== beSleepy()");
        console.log("this and I =", (this === I));   // false
    };

    beHappy();
    beSad();
    beSleepy();
}

new People();

正如您在beHappy上看到的那样,I的值与me不同,因为它包含另一个上下文。但是在beSad上,两者都保持相同的上下文(引用People)。

答案 2 :(得分:1)

问: "'这个'在被使用之前被分配给一个变量?"

答: 上下文值始终存在:实际,当前和最新。

您可以从您希望的任何上下文中进行分配,并将引用存储在过去的值中,无论您身在何处或何时达到其处理。

事实上:该作业实际上会在阅读/执行时发生 - 而不是之前和之后不是在它被使用之后。