js中的var a = new A;与var a = new A();有什么区别?

米刀文 2012-08-05 06:00:34
js中的var a = new A;与var a = new A();有什么区别?
加不加()有什么不同吗
...全文
554 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
u014730492 2014-04-15
  • 打赏
  • 举报
回复
引用 9 楼 jiestyle21 的回复:
他们说的不好懂~ js中的var a = new A;与var a = new A();有什么区别? var a = new A; //这个是引用,而并没有执行,看下面的例子 var _alert = window.alert; window.alert=function(){ return; }; 这样alert被重写了,已经废了。而_alert即为之前alert的一个引用,这个引用在内存中是已经占据一块位置的,所以_alert(1);是可以执行的。 var a = new A(); //这个其实就是立即执行了,如果你看到有这种写法,说明这个方法是有返回值的,所以才会这样做。
你确定么?我也遇到了这样的代码,着实蛋疼 : a = new B;连var也省,尼玛,坑爹啊
米刀文 2012-08-10
  • 打赏
  • 举报
回复
还是不太懂啊
SK猫 2012-08-08
  • 打赏
  • 举报
回复
只知道没构造函数时没区别,

突然想知道,如果有构造函数,那有什么区别
ajccom 2012-08-08
  • 打赏
  • 举报
回复
没区别
猿敲月下码 2012-08-07
  • 打赏
  • 举报
回复
js要求没那么高,()可有可无,最好还是加上,养成习惯
anglechengd 2012-08-07
  • 打赏
  • 举报
回复
JavaScript 中的new关键字与C#,JAVA中的概念完全不一样。
例:var a=new A();
让我们来看看在JavaScript中的new发生了什么?
var a={};//建立了一个新对象;
a.__proto__=A.prototype;//将a的原型指向A;那么a就继承了A的方法与属性!
A.call(a);//调用了A里的构造函数;
document.write(a.__proto__===A.prototype);//为true
(ie不支持!因为在IE中__proto__为私有属性,不能能访问)
所以new的作用其实就是建了一个空的对象 ,并且通过原型链记录原始对象的方法与属性

那么var a=new A()与var a=new A 的没有太大的区别,他们都说明了建立对象所需要的说明,比如a.__proto__指向谁?空对象的名字?等等。但是有一个小小的区别就是,如果A的构造为下面这种:
function A(name,addr){
this.name=name;
this.addr=addr;
}
那么var a=new A就不好构建对象了
bugknightyyp 2012-08-06
  • 打赏
  • 举报
回复
遵守规范,如果你随便写,机器又不比人,什么都能认识,人连话外之音都能听出
编程点滴 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

哦,那为什么在C#,java中new对象为什么一定要加()啊!
[/Quote]

这也是规定
jiestyle21 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

他们说的不好懂~
js中的var a = new A;与var a = new A();有什么区别?

var a = new A; //这个是引用,而并没有执行,看下面的例子
var _alert = window.alert;
window.alert=function(){ return; };
这样alert被重写了,已经废了。而_alert即为之前alert的一个引用,……
[/Quote]
如果觉得我说的不错,给分喔亲~
jiestyle21 2012-08-06
  • 打赏
  • 举报
回复
他们说的不好懂~
js中的var a = new A;与var a = new A();有什么区别?

var a = new A; //这个是引用,而并没有执行,看下面的例子
var _alert = window.alert;
window.alert=function(){ return; };
这样alert被重写了,已经废了。而_alert即为之前alert的一个引用,这个引用在内存中是已经占据一块位置的,所以_alert(1);是可以执行的。
var a = new A(); //这个其实就是立即执行了,如果你看到有这种写法,说明这个方法是有返回值的,所以才会这样做。
joybee007 2012-08-06
  • 打赏
  • 举报
回复
没有参数可以省略括号,但最好不要省略;
js虽然是弱类型语言,但是功能还是很强大的,所以写的时候还是要严格要求自己。
米刀文 2012-08-05
  • 打赏
  • 举报
回复
难道这就是强类型语言与弱类型语言的区别啊!?
米刀文 2012-08-05
  • 打赏
  • 举报
回复
哦,那为什么在C#,java中new对象为什么一定要加()啊!
licip 2012-08-05
  • 打赏
  • 举报
回复
+1这是规定呀。[Quote=引用 1 楼 的回复:]
var x=new ..其中的..必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。


没参时你的写法是一样的
[/Quote]
米刀文 2012-08-05
  • 打赏
  • 举报
回复
但是这是什么原理啊,求深入讲解
人生无悔 2012-08-05
  • 打赏
  • 举报
回复
var x=new ..其中的..必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。


没参时你的写法是一样的

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧