JavaScript 中 this 指向问题

thisJavaScirpt 语言的一个关键字
它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。
1.以函数形式调用,this指向全局window对象。

var x = 1;
function foo(){
    alert(this.x);
}
foo();//1
window.x = 2;
foo();//2

2.以对象的方法调用,this指向上级对象。

function foo(){
    alert(this.x);
}
var obj = {};
obj.x = 1;
obj.m = foo;
obj.m();//1

3.作为构造函数调用,this指向新对象。

var x = 1;
function foo() {
    this.x = 2;
}
var obj = new foo();
alert(x);//1(显然这时的this并不指向全局对象)
alert(obj.x);//2

4.通过call(),apply()调用,this指向call,apply方法内的对象。

var x = 1;
function foo() {
 alert(this.x);
}

var obj1 = {};
var obj2 = {};
obj1.x = 10;
obj2.x = 100;
obj1.m = foo;
obj1.m.apply();//1
obj1.m.apply(obj1);//10
obj1.m.call(obj2);//100

想要了解call和apply的区别和更详的知识的同学可以戳这里
本篇文章也只能算this指向的基础,旨在于通过较小篇幅让刚接触js的同学能更容易的看懂。js有很多的坑,欢迎在下面探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值