JavaScript 中的this 关键字

this 关键字,它是一个指针,指向某一个对象。

和其它面象对象程序语言一样,JavaScript也是支持面向对像的。所以,JavaScript中的每一个函数,从广义上讲都是属于某一个对象的,函数是不会孤立的存在的,它一定属于某一个对象。明白了这个道理,再回过头来看JS中的this指针,就不难理解了。

但是JS函数,看起来好像是独立存在的。

举个最简单的例子:

function test() {

alert(this);

}

函数,被我们写在了一个JS文件中,然后被引用到HTML页面中,看起来好像它跟任何对象没有关系。在这个页面中的任何一个地方都可以调用这个函数。那么这个函数是属于哪个对象呢???答案是,要看你怎么去调用这个函数。如果你直接在页面中调用 test(),那么它就是属于 windows这个对像,当然,它中间的那个this指针当然就是指向windows这个对象了。这个时候你要把test()看做是windwows的一个成员函数。第一种:

<div οnclick="test()">button</div>

返回结果是:

也就是说,现在的this并没有像我们想的那样指向出发时间的div,而是指向了window对象。

之所以出现这样的情况是因为test方法是window的方法,而不是这个div的方法。所以在标签用事件来触发方法的时候应该把this关键字当做参数传递下,在widow的方法里就可以使用了。类似上例:

<div id = "test" οnclick="test(this)">button</div>
<script type="text/javascript">
function test(tobj) {
alert(tobj.id);
}
</script>
</body>

那在什么样的情况下才不需要传递参数呢?当函数是触发事件的对象自己的函数的时候。也就是函数的owner是对象本身。

<body>
<div id = "test">button</div>
<script type="text/javascript">
function test() {
alert(this.id);
}
document.getElementById("test").οnclick=test;
</script>
</body>

上面的代码正常弹出test。

这里要注意下面两个绑定的区别:

<script type="text/javascript">
function test() {
alert(this.id);
}
//document.getElementById("test").οnclick=test;
document.getElementById("test").οnclick=function(){test()};
</script>

这种情况下是在给ID是test的变迁的onclick事件赋值。也就是把window的方法test拷贝了一次放在了onclick事件里。这个拷贝后的方法owner已经变成ID是test的对象。(因为是赋值关系,所以后一个赋值会覆盖掉前一个赋值。所以onclick绑定多个方法时只执行一个。)

getElementById("test").οnclick=function(){test()};  这种情况则是在onclick的时候执行方法window的方法test。因为window没有id,所以执行这句话的时候会报错。undefined。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值