До сих пор я видел три способа создания объекта в JavaScript. Какой способ лучше всего подходит для создания объекта и почему?
Я также видел, что во всех этих примерах ключевое слово var
не используется перед свойством - почему? Не обязательно ли объявлять var
перед именем свойства, так как упоминалось, что свойства являются переменными?
Во втором и третьем способе имя объекта пишется в верхнем регистре, тогда как в первом случае имя объекта пишется в нижнем регистре. Какой случай мы должны использовать для имени объекта?
Первый способ:
function person(fname, lname, age, eyecolor){
this.firstname = fname;
this.lastname = lname;
this.age = age;
this.eyecolor = eyecolor;
}
myFather = new person("John", "Doe", 50, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");
Второй способ:
var Robot = {
metal: "Titanium",
killAllHumans: function(){
alert("Exterminate!");
}
};
Robot.killAllHumans();
Третий способ - объекты JavaScript, использующие синтаксис массива:
var NewObject = {};
NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }
javascript
object
Jamna
источник
источник
var
, пожалуйста .. опуская это делает их глобальнымиObject.create()
:?Ответы:
Нет лучшего способа, это зависит от вашего варианта использования.
Person
(имя следует начинать с заглавной буквы) называется функцией конструктора . Это похоже на классы на других языках ОО.Обновление: как просили примеры для третьего способа.
Зависимые свойства:
Ниже не работает , как
this
это не относится кbook
. Невозможно инициализировать свойство значениями других свойств в литерале объекта:вместо этого вы можете сделать:
Динамические имена свойств:
Если имя свойства хранится в некоторой переменной или создается с помощью какого-либо выражения, то вам нужно использовать скобочные обозначения:
источник
...
для наследования от другого объекта?Существует несколько способов определения функции. Это полностью основано на вашем требовании. Ниже приведены несколько стилей:
Примеры:
Вы можете попробовать это на консоли, если у вас есть путаница.
источник
var person
в конце один и тот же экземпляр? например, в конструкторе функции вы можете просто добавитьvar person = new Person("Anand")
. и что случилось с на первый взгляд случайным использованием точки с запятой? : PНе существует «лучшего способа» создания объекта. Каждый способ имеет свои преимущества в зависимости от вашего варианта использования.
Шаблон конструктора (функция в паре с
new
оператором для его вызова) предоставляет возможность использования прототипного наследования, тогда как другие способы этого не делают. Так что, если вы хотите наследовать прототипы, тогда функция конструктора - отличный способ.Однако, если вы хотите наследование прототипа, вы также можете использовать его
Object.create
, что делает наследование более очевидным.Создание литерала объекта (ex
var obj = {foo: "bar"};
:) прекрасно работает, если у вас есть все свойства, которые вы хотите установить под рукой во время создания.Для настройки свойств позже,
NewObject.property1
синтаксис, как правило, предпочтительнее,NewObject['property1']
если вы знаете имя свойства. Но последнее полезно, когда у вас нет имени свойства заранее (например:)NewObject[someStringVar]
.Надеюсь это поможет!
источник
Я думаю, это зависит от того, что вы хотите. Для простых объектов, я думаю, вы могли бы использовать вторые методы. Когда ваши объекты становятся больше и вы планируете использовать похожие объекты, я думаю, что первый метод будет лучше. Таким образом, вы также можете расширить его с помощью прототипов.
Пример:
Я не большой поклонник третьего метода, но он действительно полезен для динамического редактирования свойств, например
var foo='bar'; var bar = someObject[foo];
.источник
Есть много способов создать ваши объекты в JavaScript. Использование функции конструктора для создания объекта или буквенной нотации объекта использует много в JavaScript. Кроме того, создавая экземпляр Object, а затем добавляя к нему свойства и методы, существует три распространенных способа создания объектов в JavaScript.
Конструктивные функции
Существуют встроенные функции конструктора, которые мы все время от времени можем использовать, такие как Date (), Number (), Boolean () и т. Д., Все функции конструктора начинаются с заглавной буквы, в то же время мы можем создать собственную функцию конструктора в JavaScript как это:
и вы можете вызвать его, просто используя new (), чтобы создать новый экземпляр конструктора, создать что-то вроде ниже и вызвать функцию конструктора с заполненными параметрами:
Объектные литералы
Использование объектных литералов очень часто используется при создании объекта в JavaScript, это пример создания простого объекта, вы можете назначить что угодно для свойств объекта, если они определены:
макетирования
После создания объекта вы можете создать для него больше членов, например, добавив цвет в наш бокс, мы можем сделать это:
источник
В то время как многие люди здесь говорят, что нет лучшего способа создания объектов, существует разумное объяснение, почему существует так много способов создания объектов в JavaScript, начиная с 2019 года, и это связано с прогрессом JavaScript на разных итерациях. EcmaScript выпускает начиная с 1997 года.
До ECMAScript 5 существовало только два способа создания объектов: функция конструктора или литеральная запись (лучшая альтернатива new Object ()). С помощью функции конструктора нотации вы создаете объект, который может быть создан в нескольких экземплярах (с новым ключевым словом), в то время как буквенная нотация доставляет один объект, например, одиночный.
Независимо от используемого вами метода, объекты JavaScript являются просто свойствами пар ключ-значение:
В ранних версиях JavaScript единственным реальным способом имитации наследования на основе классов было использование функций конструктора. функция конструктора - это специальная функция, которая вызывается с ключевым словом 'new'. По соглашению, идентификатор функции пишется с заглавной буквы, но не требуется. Внутри конструктора мы ссылаемся на ключевое слово this, чтобы добавить свойства к объекту, который неявно создает функция конструктора. Функция конструктора неявно возвращает новый объект с заполненными свойствами обратно в вызывающую функцию неявно, если только вы явно не используете ключевое слово return и не возвращаете что-то еще.
Существует проблема с методом sayName. Как правило, в языках программирования на основе объектно-ориентированных классов вы используете классы как фабрики для создания объектов. Каждый объект будет иметь свои собственные переменные экземпляра, но у него будет указатель на методы, определенные в проекте класса. К сожалению, при использовании функции конструктора JavaScript каждый раз, когда она вызывается, она определяет новое свойство sayName для вновь создаваемого объекта. Таким образом, у каждого объекта будет свое уникальное свойство sayName. Это будет потреблять больше ресурсов памяти.
Помимо увеличения ресурсов памяти, определение методов внутри функции конструктора исключает возможность наследования. Опять же, метод будет определен как свойство вновь создаваемого объекта, а не другого объекта, поэтому наследование не может работать как. Следовательно, JavaScript предоставляет цепочку прототипов как форму наследования, что делает JavaScript языком прототипов.
Если у вас есть родительский объект, и родительский объект разделяет многие свойства дочернего элемента, тогда дочерний элемент должен наследовать эти свойства. До ES5 это было сделано следующим образом:
То, как мы использовали прототип цепочки выше, имеет причуду. Поскольку прототип является действующей ссылкой, изменяя свойство одного объекта в цепочке прототипов, вы также изменили бы то же свойство другого объекта. Очевидно, что изменение наследуемого метода ребенка не должно изменять метод родителя. Object.create решил эту проблему с помощью полифилла. Таким образом, с помощью Object.create вы можете безопасно изменять дочернее свойство в цепочке прототипов, не затрагивая то же свойство родителя в цепочке прототипов.
ECMAScript 5 представил Object.create для решения вышеупомянутой ошибки в функции конструктора для создания объекта. Метод Object.create () СОЗДАЕТ новый объект, используя существующий объект в качестве прототипа вновь созданного объекта. Поскольку новый объект создан, у вас больше не возникает проблема, когда изменение дочернего свойства в цепочке прототипов изменит ссылку родителя на это свойство в цепочке.
До ES6 здесь использовался общий шаблон для создания конструкторов функций и Object.create:
Теперь Object.create в сочетании с функциями конструктора широко используются для создания и наследования объектов в JavaScript. Тем не менее, ES6 представил концепцию классов, которые в основном являются синтаксическим сахаром по сравнению с существующим наследованием на основе прототипов JavaScript. Синтаксис класса не вводит новую объектно-ориентированную модель наследования в JavaScript. Таким образом, JavaScript остается прототипом языка.
Классы ES6 значительно упрощают наследование. Нам больше не нужно вручную копировать функции-прототипы родительского класса и сбрасывать конструктор дочернего класса.
В целом, эти 5 различных стратегий создания объектов в JavaScript совпали с развитием стандарта EcmaScript.
источник
В приведенном выше примере вы можете видеть, что пустой объект действительно имеет свойства.
Хорошо, во-первых, давайте посмотрим, что является лучшим способом:
В приведенном выше примере журнал выдаст false.
Теперь давайте посмотрим, почему другие способы создания объектов являются неправильными.
Как вы можете видеть выше, все примеры записывают в true. Что означает, что если у вас есть случай, когда у вас есть
for in
цикл, чтобы увидеть, есть ли у объекта свойство, это может привести к неправильным результатам.Обратите внимание, что лучше всего это нелегко. Вам нужно построчно определять все свойства объекта. Другие способы более просты и требуют меньше кода для создания объекта, но вы должны знать об этом в некоторых случаях. Кстати, я всегда использую «другие способы», и одним из решений вышеупомянутого предупреждения, если вы не используете лучший способ, является:
источник
В основном есть 3 способа создания объектов:
Самый простой из них - использование литералов объектов .
Хотя этот метод самый простой, но имеет недостаток, т. Е. Если ваш объект имеет поведение (функции в нем), то в будущем, если вы захотите внести в него какие-либо изменения, вам придется изменить его во всех объектах. .
Так что в этом случае лучше использовать функции Factory или Constructor.
Фабричные функции - это те функции, которые возвращают object.eg-
Функции конструктора - это те функции, которые присваивают свойства объектам с помощью ключевого слова this.
источник