函数的上下文
函数中可以使用this关键字,它表示函数的上下文
与中文中“这”类似,函数中的this具体指代什么必须通过调用函数时的“前言后语”来判断
函数中的this
<script>
var xiaoming = {
nickname : '小明',age : 12,
sayHello : function () {
console.log('我是' + this.nickname + ',我' + this.age + '岁了');
}};
xiaoming.sayHello(); //我是小明,今年12岁了
</script>
<script>
var xiaoming = {
nickname : '小明',age : 12,
sayHello : function () {
console.log('我是' + this.nickname + ',我' + this.age + '岁了');
}};
var sayHello = xiaoming.sayHello;//将函数“提”出来,单独存为变量
sayHello();//直接圆括号调用这个函数,而不是对象打点调用了
//打印出:我是undefined,我undefined岁了
</script>
函数的上下文由调用方式决定
同一个函数,用不同的形式调用它,则函数的上下文不同
情形1:对象打点调用函数,函数中的this指代这个打点的对象
<script>
xiaoming.sayHello();
</script>
情形2:圆括号直接调用函数,函数中的this指代window对象
<script>
var sayHello = xiaoming.sayHello;
sayHello();
</script>
函数的上下文由调用方式决定
<script>
var obj = {
a: 1,b: 2,
fn: function () {
console.log(this.a + this.b);
}
};
//这两个this指代什么? -- 不知道!因为没被调用
//函数只有被调用,它的上下文才能被确定
</script>
例1:
<script>
var obj = {
a: 1,b: 2,
fn: function () {
console.log(this.a + this.b);
}
};
obj.fn();
//this指向的是obj
</script>
例2:
<script>
var obj = {
a: 1,
b: 2,
fn: function () {
console.log(this.a + this.b);
}
};
var fn = obj.fn;
fn();
//this指向的是w