this的基本用法
1、在object中的function(多层时this的使用)
var f = function () {
console.log(this.x);
}
var x = 1;
var obj = {
f: f,
x: 2,
};
// 单独执行
f() // undefined
// obj 环境执行
obj.f() // 2
上述语句中,在f使用this的情况下,单独执行时在window的环境中(注意:这里x不指向全局global)obj环境调用时输出了2,说明获得了obj环境中对x的赋值。
如果删除x前面的this.的话。f()和obj.f()均会输出1
2、方法赋值给变量
var d = new Date();
d.getTime() // 1481869925657
var print = d.getTime;
print() // Uncaught TypeError: this is not a Date object.
在把方法赋值给变量的过程中,方法的指针会指向全局
想解决这个问题,可以使用bind(方法
var print = d.getTime.bind(d);
print() // 1481869925657
bind()方法将getTime()方法内部的this绑定到d对象
3、变相赋值
var add = function (x, y) {
return x * this.m + y * this.n;
}
var obj = {
m: 2,
n: 2
};
var newAdd = add.bind(obj, 5);
newAdd(5) // 20
这里的bind不仅绑定了bind的this函数,而且给add()的x赋值为5
,然后返回一个新函数newAdd()
,这个函数只要再接受一个参数y
就能运行了。