Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.02.2014, 14:09
Интересующийся
Отправить личное сообщение для Universe Посмотреть профиль Найти все сообщения от Universe
 
Регистрация: 11.06.2011
Сообщений: 20

Какой способ создания объектов более правильный?
Добрый день. Занялся 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();

Вопрос собственно с следующем: какой из представленных вариантов более приемлемый в повседневном использовании? Возможно у описанных вариантов есть свои подводные камни или на выходе созданные объекты будут идентичными вне зависимости от способа их создания?

Последний раз редактировалось Universe, 12.02.2014 в 14:11.
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2014, 14:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

1) конструктор он и в африке конструктор. Самый подходящий способ создания множества инстансов. Только у тебя в примере нет никакого наследования
2) Норм, когда у тебя один объект, то есть когда не нужен конструктор
3) Фигня какая-то. Вобще шляпа.

В итоге остаются два варианта. Соответственно, нужен конструктор - юзай конструктор. Не нужен конструктор - не юзай конструктор. Помоему усе просто
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 12.02.2014, 17:47
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от danik.js
3) Фигня какая-то. Вобще шляпа.
не шляпа, а любимый способ владельца форума
http://javascript.ru/tutorial/object...itance#factory

хотя мне тоже не очень нравится.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой код более оптимальный? Apollon Общие вопросы Javascript 10 04.11.2013 01:31
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
Какой фреймворк выбрать? нужно а) компоненты формы б) ajax подгрузка объектов ... plazzzm Библиотеки/Тулкиты/Фреймворки 5 05.02.2013 17:41
Какой правильный синтаксис Dimaz jQuery 1 04.12.2012 22:48
Какой способ задания значения переменной в javascript коде корректен user_robot Общие вопросы Javascript 3 08.12.2009 17:25