2
housne 2014 年 7 月 3 日 - - 貌似是一样的,但为什么这里要 new 呢 。。。
|
3
chraac 2014 年 7 月 3 日 this不一样了吧
|
4
jsonline 2014 年 7 月 3 日 via Android 当然不一样。
任何一本JS书里都写了 new 操作符做了什么事情。 |
5
bigcoon 2014 年 7 月 3 日 应用层面来说无本质区别,calculator 和 Calculator() 返回的对象是一样的
|
6
lijsh 2014 年 7 月 3 日 首先,用new调用与不使用new调用的区别在于,前者会隐式返回一个实例,函数体内的this指向这个实例;
但如果函数显式返回一个对象,那么new func()里面this的操作虽然还是针对实例对象,但返回的时候这个实例对象会被丢弃,new func()和func()的效果就是一样的。 注意这里返回的必须是对象,如果return的是字符串或者Number,那就不会有效果,构造函数原来的行为会得到保留。 参考: http://bonsaiden.github.io/JavaScript-Garden/zh/#function.constructors |
7
zewenzhang 2014 年 7 月 3 日 完全一样
|
8
lijsh 2014 年 7 月 3 日 |
9
lijsh 2014 年 7 月 3 日 缩进居然不支持……擦
|
10
chemzqm 2014 年 7 月 3 日 除非你是构造函数实例化一个对象,否则别用 new.
如果你想让调用者可以省略new 关键字,可以这么搞: function Notice(msg, options) { if (! (this instanceof Notice)) return new Notice(msg, options); 这样有没有 new 调用 Notice 就完全一样了 |
11
otakustay 2014 年 7 月 3 日 函数内部的this会不一样,抛开逻辑光从返回值上来说new和没有new是一样的了,比如
function xx() { return { x: 1 }; } 这样xx()和new xx()是完全一样的 |
12
bravluna 2014 年 7 月 3 日
答案:一样的。可是这样写很容易引起困扰,因为它依赖一个硬性规定,就是如果构造函数返回了一个对象,那么这个对象会替代 new 操作符产生的对象而成为 new 对象创建表达式的值。所以,如果想把一个函数当成构造函数,就不要包含 return 语句。
|
13
coolicer 2014 年 7 月 3 日
上面已经有人回答了,不一样。new过之后,this指向明显不一样。
|
17
lotem 2014 年 7 月 3 日
|
19
xieranmaya 2014 年 7 月 5 日
这是基础啊大哥
有new时this指向新创建的对象 没new时this指向global 非要处理这种情况的话,一般的做法是 function Class(){ if(this==window){// !this instanceof Class return new Class(); }else{ init(); } } |