Почему большинство фреймворков JavaScript используют объектные литералы - PullRequest
0 голосов
/ 06 февраля 2012

Почему большинство фреймворков javascript используют литералы объектов вместо конструкторов или конструкторов с прототипами? Будет ли это нестандартным, если кто-то использует конструкторы с прототипами в новой фреймворке. Каковы преимущества литералов объектов перед конструкторами с прототипами?

Ответы [ 4 ]

1 голос
/ 06 февраля 2012

Я думаю, вы говорите об использовании {} против new Object() и [] против 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 были немного медленнее.Однако массивы литералов были намного быстрее.Синтаксис все еще предпочтителен, хотя.

1 голос
/ 06 февраля 2012

Все зависит от потребности программы, которую вы пишете, и от того, как вы хотите поддерживать базу кода.

Когда у вас есть объекты, которые часто создаются с помощью общих свойств и методов, это может бытьболее эффективно использовать память и использовать конструктор и заполнить его прототип.

Когда код более или менее одноэлементный, возможно, более эффективно просто создать объект и заполнить его некоторыми методами.

Если вам нужна дополнительная информация о «шаблонах» и что они могут значить для вас, вы можете проверить http://addyosmani.com/resources/essentialjsdesignpatterns/book/

или если вам нравится обычная (электронная) книга, я бы порекомендовал http://shop.oreilly.com/product/9780596806767.do

1 голос
/ 06 февраля 2012

Полагаю, вы имеете в виду, как jQuery автоматически определяет объекты jQuery / $? простой ответ ... так проще. Можете ли вы представить, насколько запутанным будет jQuery для новых пользователей, если им придется включать следующие две строки на каждой странице?

var jQuery = new jQuery();
var $ = jQuery;
0 голосов
/ 09 ноября 2013

Но если вы создаете экземпляр объекта несколько раз, то прототип использует меньше памяти, потому что вы не воссоздаете весь объект всеми его методами.

Прототип хорош, потому что он позволяет вам создавать новый метод на лету и использовать все возможности этого объекта. Синтаксически это некрасиво, и я предпочитаю объектный литерал. Но если вы создаете масштабное приложение, а производительность - большая проблема, то, скорее всего, прототип - это путь вперед?

...