2015-07-09 2 views

ответ

0

Возвращая объект, который явно определенный вы нарушаете «из-оф -box "прототипной цепи наследования, которая является родной для JavaScript. Ниже канонический пример использования конструктора для создания экземпляров новых объектов, которые наследуют от прототипа ...

function PersonTemplate(firstName, lastName) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 

Отсюда мы можем добавить методы на protoypePersonTemplate «s, что делает использование Protoype цепи.

PersonTemplate.prototype.sayHello = function() { 
    return 'Hello, my name is ' + this.firstName + '!'; 
} 

var john = new PersonTemplate('John', 'Smith'); 
john.sayHello(); // => "Hello, my name is John!" 

Теперь, если мы должны были попытаться использовать прототипичное наследование через ваш пример выше (при условии, sayHello еще добавляются к PersonTemplate.prototype, это будет результатом ...

var PersonTemplate = function() { 
    return { 
     firstName: '', 
     lastName: '' 
    } 
} 

var john = new PersonTemplate('John', 'Smith'); 
john.sayHello(); // => Uncaught TypeError: john.sayHello is not a function 

Явно возвращать объектный литерал от вашего конструктора, эта связь сломана, и вы больше не используете «классический» объектно-ориентированный JavaScript через цепочку прототипов.

Это не значит, что нет эзотерических и совместных которые можно было бы расширить, и объединить новую методику наследования. В конце концов, есть всевозможные творческие способы компоновки и связывания объектов (например, OLOO стиль от Kyle Simpson here, но это для более широкого обсуждения.

Смежные вопросы