这两种结构之间有什么区别
var bar = {
something : value,
execute : function() { /* Whatever */ }
}
function foo() {
this.something = value;
this.execute = function() { /* Whatever */ };
}
我的理由是bar是一个静态对象,而foo是一个必须创建的常规对象,调用新的构造函数
这是对的吗?或者不是真的
答案 0 :(得分:1)
我假设你的意思是bar
(正如你宣布的那样)和
var bar2 = new foo();
bar
和bar2
之间没有太大区别,除了bar
的原型永远是Object
的原型属性(就好像你有编写var bar = new Object(); bar.something = value; bar.execute = function() {...}
),而bar2
的原型将分配给prototype
的{{1}}属性(默认情况下为foo
的原型属性)
除了原型问题之外,编写构造函数主要是为了方便。
请注意,使用构造函数方法,您可以使用原型:
Object
然后function foo() {
this.something = value;
}
foo.prototype.execute = function() { /* Whatever */ };
的所有实例共享相同的foo
函数。这比为每个execute
对象创建一个新的函数对象更节省空间。 (当然,如果你只创造其中一个,那就没有多大优势。)