var instance = new func; 和 new func()有区别吗?

2015-07-04 17:19:24 +08:00
 cc7756789
```javascript
function Bird(){
this.name = 'asaa';
this.say = function (){
return (this.name + 'hi!')
}
}

var bob = new Bird;
var bob2 = new Bird();
bob.name;
bob2.name;
```

结果相同,但是加括号和不加有区别吗。如果是某些语言,加括号才能实例化。
2895 次点击
所在节点    JavaScript
11 条回复
Wenwei
2015-07-04 17:29:03 +08:00
javascript,在构造函数无需参数的情况下,是无区别的。如果需要参数,就需要括号。一般情况下,加上括号保证代码风格统一。
yimity
2015-07-04 20:06:27 +08:00
你的标题和内容不符嘛。
MineLucky
2015-07-04 20:17:58 +08:00
同意1L
otakustay
2015-07-04 20:39:11 +08:00
就上面的代码来说没区别,但有时候会有区别,比如

var toString = new Number.toString; // TypeError
var toString = new Number().toString; // [Function: toString]
pH
2015-07-04 20:44:05 +08:00
这个都是访问对象里的name属性把?
banri
2015-07-04 22:07:43 +08:00
有区别,带()表示的是函数的运行结果,不带()表示的是函数本身,这样理解就可以了

参考一本很老但是对很多概念讲解很细致、易懂的书籍:JavaScript DOM高级程序设计
ChiChou
2015-07-04 22:55:19 +08:00
P.S. @otakustay 的代码第一行改成 (new Number).toString 就好了~
sneezry
2015-07-04 23:01:23 +08:00
@banri 不过就楼主的问题来看这样说似乎并不恰当,new是创建一个实例,其实并不运行函数
Biwood
2015-07-04 23:46:29 +08:00
@banri 用 new 操作时,不带 () 也会运行函数的,你可以试试。
1楼是正解
Jaylee
2015-07-04 23:46:56 +08:00
@banri new 并不是运行函数
banri
2015-07-05 06:48:47 +08:00
@sneezry
@Biwood
@Jaylee

你们是对的…昨天没仔细看T_T
我说的该是没有new的情况,这里不恰当

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX