У меня есть метод, который позволит мне выбрать объект-прототип при создании нового объекта (скопированный из книги "Javascript :The Good Parts"):
Object.create = function(o) {
var F = function() {};
F.prototype=o;
return new F();
}
Теперь скажем, у меня есть объект:
var car = {
model: "Nissan"
};
И я создаю новый объект на основе этого объекта, используя метод «Создать» :
var car1 = Object.create(car);
. Затем я могу добавить свойство к car, и оно будет динамически добавлено к car1 (динамическое прототипирование ). Например, для:
car.year=2011; // Gets added to "car"...
alert(car1.year); //... Is also avaialable to car1
Q1 )Такое поведение указывает на то, что «год» был добавлен к прототипу автомобиля, поэтому он доступен для автомобиля1. Это правильно? Если нет, то куда добавляется «год» и почему он доступен как для «автомобиля», так и для «автомобиля1»?
Кроме того, согласно правилу делегирования, если метод не может быть найден для объекта, он будет искать его прототип, а затем проверять все прототипы вверх по цепочке, пока не дойдет до Object.prototype. Так что теперь, если я наберу что-то вроде этого:
Object.prototype.originCountry = "Japan";
alert(car.originCountry); // Outputs Japan
alert(car1.originCountry); // Outputs Japan
Пока все хорошо; однако, если я сделаю:
Object.carColor= "White";
alert(car.carColor); // Error!
Q2 )Когда я добавлю свойство к "автомобилю" (см. пример car.year выше, оно будет добавлено к прототипу автомобиля. Однако, когда я добавляю свойство в объект, оно не добавляется в прототип объекта? Если он добавляется в прототип объекта, то почему он недоступен для «автомобиля» в соответствии с правилом делегирования?
Почему это происходит?