'这'在使用之前分配给了一个var
'this' is assigned to a var before being used?
我经常看到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");
}
}
我很确定这不是重复的,其他帖子上给出的答案并不明确。
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({});
function.call
只是改变函数上下文的多种方式之一。
Q: "在使用之前,‘这个’被分配给了一个var?"
A: this 上下文值始终存在:实际值、当前值和最新值。
您可以从任何您希望的上下文中分配它,并从您所在的任何位置或任何您接触到它句柄的时间存储对它过去值的引用。
事实上:赋值实际上是在读取/执行时发生的,而不是在&而不是在使用之后。
它通常用于保存另一个上下文。如果要将另一个上下文传递到另一个块中,可以使用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
的引用)。
相关文章:
- '这'在使用之前分配给了一个var
- JavaScript 在内部函数中保留一个 var
- jQuery-如何使var文本可点击,该文本放置在由更多元素组成的另一个var中(var,checkbox)
- 如何创建<p>标记,并在我单击它时将其分配给一个var
- 在 JavaScript 中,当一次声明多个变量时,仅使用一个 var 语句是否有内存优势
- 为什么我已经定义的全局变量被IE8中的另一个var语句覆盖
- Javascript:在“this”关键字之前有一个“var”关键字
- JS:我应该在点击(或等效)事件中设置一个var/let吗?
- Angularjs.then函数创建一个var以传递到外部.then
- 如何为路由实现另一个var参数名称
- 用javascript创建一个var;修改脚本以创建var用法
- 另一个var中的setDate方法返回不同的值
- 保护API令牌,使其成为我的index.js中的一个var
- 一个Var,多个createElement
- 你能从数组中调用一个var,而不是它的值吗
- 使用Restangular并尝试从$scope中为一个var设置多个参数
- 如何在jquery或javascript中连接另一个var字符串中的var
- 我如何定义一个var作为对象从对象在for循环
- 为什么我们需要使用一个“var”来定义许多变量?
- 为什么可以't我使用ajax将一个var从php导入到js