Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Какой способ создания объектов более правильный? (https://javascript.ru/forum/misc/45051-kakojj-sposob-sozdaniya-obektov-bolee-pravilnyjj.html)

Universe 12.02.2014 14:09

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

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

danik.js 12.02.2014 14:22

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

В итоге остаются два варианта. Соответственно, нужен конструктор - юзай конструктор. Не нужен конструктор - не юзай конструктор. Помоему усе просто :)

Яростный Меч 12.02.2014 17:47

Цитата:

Сообщение от danik.js
3) Фигня какая-то. Вобще шляпа.

не шляпа, а любимый способ владельца форума :)
http://javascript.ru/tutorial/object...itance#factory

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


Часовой пояс GMT +3, время: 13:36.