先来看一段菜鸟教程的定义:
面向对象语言中 this 表示当前对象的一个引用:
1.在方法中,this 表示该方法所属的对象。
2.如果单独使用,this 表示全局对象。(Window对象)
3.在函数中,this 表示全局对象。(Window对象)
4.在函数中,在严格模式下,this 是未定义的(undefined)。
5.在事件中,this 表示接收事件的元素。
6.类似 call() 和 apply() 方法可以将 this 引用到任何对象。
来看一些有关this的题目:
var age = 50;
let obj = {
age: 20,
sayHi() {
console.log(this.age);
return function() {
console.log(this.age);
}
}
}
let att = {
age:21
}
att.sayHi = obj.sayHi;
att.sayHi(); // 30 this=att
var sayHi = att.sayHi;
sayHi(); // 50
// 下面的代码可以拆分为 var fn = obj.sayHi();fn();
obj.sayHi()(); // 20 50
下面的例子可以通过call方法借用数组的方法
arr1 = {
length: 0,
// push(val) {
// this[this.length++] = val;
// },
// forEach(fn) {
// for(let i=0;i<this.length;i++){
// fn(this[i], i);
// }
// },
push(val) {
Array.prototype.push.call(this, val);
},
forEach(fn) {
Array.prototype.forEach.call(this, fn);
}
}
arr1.push("aaa");
arr1.push("bbb");
arr1.forEach(r => {
console.log(r);
})