用字面量调用原型方法为什么会报错,在加括号之后this对象变成了global?

2023-03-27 0 1,063

在思考原型对象中的this时发现,使用字面量直接调用会报错,但是使用变量调用就不会
如:

Array.prototype.hello=function(){
    console.log('hello',this);
}
let p=[1,3];
p.hello();//输出hello,[1,3]
[1,3].hello();//报错

想到可能是没加括号的问题,给字面量加上括号后:

Array.prototype.hello=function(){
    console.log('hello',this);
}
([1,3]).hello();//输出全局global变量和报错

并且其中的this==global
上面的执行环境是node
今天试着在html文件中用<script>标签引入

用字面量调用原型方法为什么会报错,在加括号之后this对象变成了global?
用字面量调用原型方法为什么会报错,在加括号之后this对象变成了global?


加了括号后this指向window,为什么加了括号之后的this会指向全局变量,而且为什么在控制台可以正常执行,在别的环境下会报错?

回答:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Example</title>
  </head>
  <body>
    <script>

        Array.prototype.hello=function(){
          console.log('hello',this);
        };

        [1,3].hello()
      
      
    </script>
  </body>
</html>

不看我的解释,你能发现你我代码的不同之处吗?

分号在 javascript 中是可选的,但是某些情况,你最好加上,不加的话你写的代码相当于:

Array.prototype.hello= function() { ... }[1,3].hello();//它会被认为一条语句

至于你在node下会出错,我合理怀疑你 [1,3].hello()前一条语句最后也少了分号,(虽然你贴出来的代码里是有的,我试了一下并不会报错)

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 用字面量调用原型方法为什么会报错,在加括号之后this对象变成了global? https://www.jkxiazai.com/1038.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务