Добрый день. Занялся 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();
Вопрос собственно с следующем: какой из представленных вариантов более приемлемый в повседневном использовании? Возможно у описанных вариантов есть свои подводные камни или на выходе созданные объекты будут идентичными вне зависимости от способа их создания?