用字面量调用原型方法为什么会报错,在加括号之后this对象变成了global?
在思考原型对象中的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指向window,为什么加了括号之后的this会指向全局变量,而且为什么在控制台可以正常执行,在别的环境下会报错?
回复
1个回答
test
2024-07-07
<!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()前一条语句最后也少了分号,(虽然你贴出来的代码里是有的,我试了一下并不会报错)
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容