[JS] this, 你到底指向谁?

JS中, this的值取决于调用的模式, 而JS中共有4中调用模式:app


1. 方法调用模式函数

当一个函数被保存为对象的一个属性时, 咱们称它为一个方法, 当一个方法被调用时, this指向该对象, 如:this

var obj = {
 value: 1,
 getValue: function() {
  alert(this.value);
 }
};
obj.getValue(); // 输出1, 此时的this指向obj


注意: 该模式中, this到对象的绑定发生在方法被调用的时候.spa


2. 函数调用模式prototype

当一个函数并不是一个对象的属性时, 它被看成一个函数来调用, 此时的this指向全局对象(window), 如:code

window.value = 1;
function getValue() { alert(this.value); }
getValue(); // 输出1, 此时的this指向window.



3. 构造器调用模式orm

结合new前缀调用的函数被称为构造器函数, 此时的this指向该构造器函数的实例对象, 如:对象

function show(val) {
 this.value = val;
};
show.prototype.getVal = function() {
 alert(this.value);
};
var func = new show(1);
func.getVal(); // 输出1
alert(func.value) // 输出1
// 从上面的结果, 能够看出, 此时的this指向了func对象.


4. apply/call调用模式get

apply和call方法可让咱们设定调用者中的this指向谁, 如: io

var fun = function(str) {
 this.status = str;
}
fun.prototype.getStatus = function() {
 alert(this.status);
}
var obj = {
 status: "loading"
};
fun.prototype.getStatus.apply(obj); // 输出"loading", 此时getStatus方法中的this指向了obj
相关文章
相关标签/搜索