2015-12-30 4 views
0

чем разница между добавлением метода в качестве прототипа и определения в функции конструктораJavascript прототипирования

Для, например: между

function Car(model, year, miles) { 
this.model = model; 
this.year = year; 
this.miles = miles; 
this.toString = function() { 
     return this.model + " has done " + this.miles + " miles"; 
}; 
} 

и

function Car(model, year, miles) { 
this.model = model; 
this.year = year; 
this.miles = miles; 
} 

Car.prototype.toString = function() { 
     return this.model + " has done " + this.miles + " miles"; 
}; 
+0

Первый новый автомобиль(). ToString === new Car(). ToString; // false' Второй «новый автомобиль(). toString === new Car(). toString; // true' –

+0

Пожалуйста, открепите свой код. –

ответ

1
  1. this.toSting добавляет свойство каждого нового объекта, сделанного с использованием Car конструктор.

  2. Car.prototype - отдельный объект, в котором все объекты, созданные с использованием new Car(...), наследуют свойства. Поскольку toString является свойством объекта-прототипа, это наследуется всеми объектами .

Пусть var car = new Car(...);

Оба доступны по телефону car.toString().

Однако, когда звонок сделан, сначала автомобиль искал свойство toString. Если ни один не существует, то для прототипа выполняется поиск toString, и это называется. Если они не существуют, прототип прототипа просматривается по всей цепочке до тех пор, пока на прототипе базовых объектов не будет найден toString.

+0

новые автомобили делегаты прототипа. ;-) – synthet1c

+0

@ synthet1c Если наследование свойства через цепочку прототипов зависит от того, найдено ли указанное свойство на объекте, может ли это быть уточнено как делегирование? Я согласен, что наследование - не самый лучший термин. – puqeko

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