为什么大多数javascript框架使用对象文字而不是带有原型的构造函数或构造函数?如果有人在新框架中使用带有原型的构造函数,那么它是非标准的吗?对象文字比带有原型的构造函数有什么优势? / p>
答案 0 :(得分:1)
我假设你的意思是jQuery如何自动定义jQuery / $对象?简单的答案......这样更容易。你能想象如果新用户必须在每一页中包含以下两行,那么jQuery会有多混乱吗?
var jQuery = new jQuery();
var $ = jQuery;
答案 1 :(得分:1)
我认为你在谈论使用{}
vs new Object()
和[]
vs new Array()
。
两种情况下的文字版本通常更快(当然这取决于浏览器)。您还可以获得额外的优势,即能够从一开始就定义对象中的属性或数组中的项。这使代码更轻巧,更易读。
var o = {
a: 1,
b: 2,
c: 3,
d: 4
};
// vs.
var o = new Object();
o.a = 1;
o.b = 2;
o.c = 3;
o.d = 4;
var a = [1, 2, 3, 4, 5];
// vs.
var a = new Array();
a.push(1, 2, 3, 4, 5);
修改:我对objects和arrays进行了性能测试。对我来说,Chrome中的对象文字实际上有点慢。然而,数组文字要快得多。不过,语法仍然是首选。
答案 2 :(得分:1)
这完全取决于您正在编写的程序的需要以及您希望维护代码库的方式。
当你拥有使用共享属性和方法进行大量实例化的对象时,使用构造函数并填充其原型可以更有效地记忆。
当代码或多或少是一个单例时,只需创建一个对象并用一些方法填充它就可能更有效。
如果您想了解有关“模式”的更多信息及其对您的意义,可以查看http://addyosmani.com/resources/essentialjsdesignpatterns/book/
或者,如果您喜欢常规(电子)书,我会推荐http://shop.oreilly.com/product/9780596806767.do
答案 3 :(得分:0)
但是如果您多次实例化对象,那么原型使用较少的内存,因为您没有使用其所有方法重新创建整个对象。
Prototype非常好,因为它允许您动态创建一个新方法并使用该对象的所有内容。从语法上讲,它很难看,我更喜欢对象字面意思。但是,如果你正在构建一个庞大的应用程序并且性能是一个大问题,那么原型可能是前进的方式吗?