this具体是什么,要看函数如何被调用
举俩个栗子:
var xiaoming = {
name: '小明',
age: 12,
sex: '男',
fun: function() {
console.log(this.age);
}
};
情形① :
xiaoming.fun();
JS规定,如果是“对象.函数()”,此时函数的上下文就是这个对象。
因此,此时函数的上下文就是xiaoming。程序输出“12”。
情形②:
var f = xiaoming.fun;
f();
JS规定,如果是“函数()”,此时函数的上下文就是Window对象。因
此,此时函数的上下文就是Window对象。程序输出“undefined”。
this的六种规则
函数的调用形式 上下文 | ||
规则1 | fn() | window |
规则2 | obj.fn() | obj |
规则3 | arr[index]() | arr |
规则4 | box.onclick = fn | box |
规则5 | fn.call(obj) fn.apply(obj) | obj |