Javascript中的this

this,相信每位Coder都不会陌生,它甚至会让很多人"凌乱"不堪:在C#中,this引用类的当前实例;C++中有指针的概念,this指向对象自身的指针.........而在当今网络编程语言中,最有作为、也最受争议的Javascript里,这个神奇的this到底代表什么?

世间唯一永恒不变的,就是变化。Javascript中的this亦是如此,this究竟是什么,完全取决于环境的变化,这得从Javascript函数的五种调用模式说起:

1、方法调用模式:
用该模式调用方法时,会将调用对象绑定到this,这种超级迟绑定成就了this的高度复用,此时也能用this访问对象,且能从对象中取值或修改该对象。
如:
C.Batch();
Batch中的this,指向C对象。

2、函数调用模式:
当以该模式调用方法时,this被绑定到全局对象,我能确定这是Javascript语言的一个设计错误,但世界总是会允许错误出现,而我们不能因为错误需要继续存在而误认为它是正确的。
如:
function Batch() { alert(this); };
Batch();
此时指向this指向全局对象,在网页上运行,会弹出Window。

3、构造器调用模式:
几乎所有高级编程语言都基于类继承的,而Javascript却偏离了这一主流:它是基于原型继承的,如果在调用函数时,前面加上new,将返回该函数的prototype的新对象,并将this绑定到这个新对象上。
如:
alert(new Tabs());
此时指向this指向Tabs函数的prototype的对象,如果代码是在网页上,会弹出object。

4&5、Apply调用模式和Call调用模式:
在这两种模式中,都允许我们选择this的值,第一个参数您需要绑定到this的对象 。
如:
var o=[1,2,3,4,5];
function Ca()
{
    alert(this.join("_"));
 }
Ca.call(o);
此时this指向传入的第一个参数,即o这个数组,故会弹出1_2_3_4_5。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值