为什么大多数 javascript 框架使用对象文字而不是构造函数或带有原型的构造函数?如果有人在新框架中使用带有原型的构造函数,那会是不标准的吗?对象文字相对于带有原型的构造函数有什么优势?
4 回答
我假设您的意思是 jQuery 如何自动定义 jQuery/$ 对象?简单的答案......这样更容易。如果新用户必须在每个页面中包含以下两行,你能想象 jQuery 会给新用户带来多大的困惑吗?
var jQuery = new jQuery();
var $ = jQuery;
我认为您在谈论使用{}
vsnew 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);
编辑: 我对对象和数组进行了性能测试。对我来说,对象字面量在 Chrome 中实际上要慢一些。然而,数组文字要快得多。不过,语法仍然是首选。
这一切都取决于您正在编写的程序的需要以及您想要维护代码库的方式。
当您拥有使用共享属性和方法大量实例化的对象时,使用构造函数并填充其原型可能在内存方面更有效。
当代码或多或少是单例时,只创建一个对象并用一些方法填充它可能更有效。
如果您想了解有关“模式”的更多信息以及它们对您的意义,您可以查看http://addyosmani.com/resources/essentialjsdesignpatterns/book/
或者,如果您喜欢普通的(电子)书,我会推荐http://shop.oreilly.com/product/9780596806767.do
但是,如果您多次实例化对象,那么原型会使用更少的内存,因为您没有使用其所有方法重新创建整个对象。
原型很好,因为它允许您动态创建新方法并使用该对象的所有实例。从语法上讲,它很丑,我更喜欢对象文字。但是如果你正在构建一个大型应用程序并且性能是一个大问题,那么原型可能是前进的方向,不是吗?