Какой способ создания объектов более правильный?
Добрый день. Занялся JS после того как довольно долгое время уже работал с AS3 и успел привыкнуть к ООП радостям этого языка. В JS же как то всё не однозначно. Сейчас рассматриваю наследование и разные способы создания объекта. На сколько я успел узнать в JS есть как минимум 3 разных способа создать дочерний объект от родительского (унаследовать):
1. Через функцию конструктор function Person(name, address) { if(!(this instanceof Person))return new Person(name, address); this.name = name; this.address = address; } Person.prototype.sayHello = function() { console.log(this.name + " says hello"); } window.Person = Person; 2. При помощи Object.create(); var parent = {a:1}; var child = Object.create(parent); 3. Через "фабрику" объектов: // конструктор базовых объектов function base(spec) { var that = {}; // создать пустой объект that.name = spec.name; // создать свойство name и присвоить ему значение name от spec return that; // вернуть этот объект } // конструктор объектов, наследующих от "базового" объекта function child(spec) { var that = base(spec); // создать объект с помощью "базового" конструктора that.sayHello = function() { // добавить фунцкию в новый объект return 'Hello, I\'m ' + that.name; }; return that; // вернуть этот объект } // использование var object = child({ name: 'a functional object' }); result.textContent = object.sayHello(); Вопрос собственно с следующем: какой из представленных вариантов более приемлемый в повседневном использовании? Возможно у описанных вариантов есть свои подводные камни или на выходе созданные объекты будут идентичными вне зависимости от способа их создания? |
1) конструктор он и в африке конструктор. Самый подходящий способ создания множества инстансов. Только у тебя в примере нет никакого наследования :haha:
2) Норм, когда у тебя один объект, то есть когда не нужен конструктор 3) Фигня какая-то. Вобще шляпа. В итоге остаются два варианта. Соответственно, нужен конструктор - юзай конструктор. Не нужен конструктор - не юзай конструктор. Помоему усе просто :) |
Цитата:
http://javascript.ru/tutorial/object...itance#factory хотя мне тоже не очень нравится. |
Часовой пояс GMT +3, время: 13:36. |