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