我经常看到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");
}
}
我很确定这不是重复,其他帖子上给出的答案不是确定的。
答案 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)
问: "'这个'在被使用之前被分配给一个变量?"
答: 此 上下文值始终存在:实际,当前和最新。
您可以从您希望的任何上下文中进行分配,并将引用存储在过去的值中,无论您身在何处或何时达到其处理。
事实上:该作业实际上会在阅读/执行时发生 - 而不是之前和之后不是在它被使用之后。