this

主要分为以下四种情况

1.方法调用模式

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

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

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

2.函数调用模式

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

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

3.构造器调用模式

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

1
2
3
4
5
6
7
8
9
10
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调用模式

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

1
2
3
4
5
6
7
8
9
10
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

本文标题:this

文章作者:Coding_youth

发布时间:2017年10月09日 - 14:10

最后更新:2020年05月28日 - 19:05

原始链接:https://yangchendoit.github.io/2017/10/09/this/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!