Поведение прототипа Javascript

У меня есть метод, который позволит мне выбрать объект-прототип при создании нового объекта (скопированный из книги "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 выше, оно будет добавлено к прототипу автомобиля. Однако, когда я добавляю свойство в объект, оно не добавляется в прототип объекта? Если он добавляется в прототип объекта, то почему он недоступен для «автомобиля» в соответствии с правилом делегирования?

Почему это происходит?

5
задан Taha Ahmad 26 April 2012 в 07:02
поделиться