关于改变this的指向方式有多种,比如可以使用call()或者bind()函数等。

不过这里就不多介绍了,具体可以参阅以下章节。

1.call()函数可以参阅js call()一章节。

2.原生的bind()函数可以参阅javascript bind()一章节。

3.this的基本用法可以参阅javascript this一章节。

下面介绍一下一下js中常见的一种解绑this的方式,先看一段代码实例:
   [ bootstrap ] 运行代码    下载代码
<script>
var url="51qianduan.com";
var obj={
  url:"51前端",
  func:function(){
    return this.url;
  }
};
console.log(obj.func());
</script>
上面的代码可以输出字符串"蚂蚁部落",这个没有什么疑问,再来看一段代码:
   [ bootstrap ] 运行代码    下载代码
<script>
var url="51qianduan.com";
var obj={
  url:"51前端",
  func:function(){
    return this.url;
  }
};
console.log((0||obj.func)());
</script>
上面的代码的输出结果是"蚂蚁部落",说明this的指向已经不是对象obj,而是指向window对象,下面就对此现象的原因做一下简单介绍,希望能够给需要的朋友带来一定的帮助。

在ES3规范中,除去call()和apply()函数,还能够影响this的就是Property accessor(属性访问)语法。

例如obj.func(),属性访问部分就是函数调用运算符"()"的左边部分,它会获取一个base为obj的referenceType(引用类型),然后进行函数调用运算. 则referenceType.base会为该函数执行环境的this提供引用。如果想要解除此引用对象,只要使用如下类似的方式即可,代码如下:
   [ bootstrap ] 运行代码    下载代码
<script>
var url="51qianduan.com";
var obj={
  url:"51前端",
  func:function(){
    return this.url;
  }
};
console.log((0||obj.func)());
</script>
从上面代码的运算结果可以看出this是指向window对象的,也就是说明this已经从obj解绑了。

这是因为使用或运算符以后,会执行为真的那个表达式,并返回表达式的值,等效于如下代码:
   [ bootstrap ] 运行代码    下载代码
<script>
var url="51qianduan.com";
var obj={
  url:"51前端",
  func:function(){
    return this.url;
  }
};
//console.log((0||obj.func)());
var func=obj.func;
console.log(func());
</script>

代码描述:JavaScript this指向解绑。JavaScript this指向解绑代码下载



127 169



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到