Два разных (?) Метода наследования объектов в Javascript - PullRequest
2 голосов
/ 16 октября 2011

Есть ли разница между следующими двумя методами наследования объектов в Javascript?

function Person(name) {
    this.name = name;
}
function Student(name, id) {
    Person.call(this, name);
    this.id = id;
}

Метод 1:

Student.prototype.__proto__ = Person.prototype;

Метод 2:

Student.prototype = new Person;
Student.prototype.constructor = Student;

1 Ответ

1 голос
/ 16 октября 2011

Помимо создания объектов по заданному шаблону, функция конструктора делает еще одну полезную вещь, она автоматически устанавливает объект-прототип для вновь создаваемых объектов. Этот объект-прототип хранится в свойстве ConstructorFunction.prototype.

Вы можете явно сделать это, установив, довольно «внутреннее», свойство .__proto__ для конкретного объекта. Это не возможно во всех реализациях JavaScript в любом случае. Но в основном это почти то же самое. Если прототип не установлен специально для объекта, берется объект по умолчанию (Object.prototype).

...