代码描述:JavaScript this指向解绑。JavaScript this指向解绑代码下载
关于改变this的指向方式有多种,比如可以使用call()或者bind()函数等。 不过这里就不多介绍了,具体可以参阅以下章节。 1.call()函数可以参阅js call()一章节。 2.原生的bind()函数可以参阅javascript bind()一章节。 3.this的基本用法可以参阅javascript this一章节。 下面介绍一下一下js中常见的一种解绑this的方式,先看一段代码实例:
<script> var url="51qianduan.com"; var obj={ url:"51前端", func:function(){ return this.url; } }; console.log(obj.func()); </script>
上面的代码可以输出字符串"蚂蚁部落",这个没有什么疑问,再来看一段代码:
<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提供引用。如果想要解除此引用对象,只要使用如下类似的方式即可,代码如下:
<script> var url="51qianduan.com"; var obj={ url:"51前端", func:function(){ return this.url; } }; console.log((0||obj.func)()); </script>
从上面代码的运算结果可以看出this是指向window对象的,也就是说明this已经从obj解绑了。 这是因为使用或运算符以后,会执行为真的那个表达式,并返回表达式的值,等效于如下代码:
<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>
请绑定手机号,在继续操作
注意:只有绑定手机以后,才可使用网站全部功能