Вкладки Vim и буферы

Позвольте мне рассказать вам о моем понимании прототипов. Я не собираюсь сравнивать наследство здесь с другими языками. Я бы хотел, чтобы люди перестали сравнивать языки и просто понимали язык как таковой. Понять прототипы и наследование прототипов так просто, как я покажу вам ниже.

Прототип похож на модель, на основе которой вы создаете продукт. Важно понимать, что когда вы создаете объект, используя другой объект в качестве прототипа, связь между прототипом и продуктом является постоянной. Например:

var model = {x:2};
var product = Object.create(model);
model.y = 5;
product.y
=>5

Каждый объект содержит внутреннее свойство, называемое [[prototype]], к которому может обращаться функция Object.getPrototypeOf(). Object.create(model) создает новый объект и устанавливает его свойство [[prototype]] для модели объекта . Следовательно, когда вы сделаете Object.getPrototypeOf(product), вы получите объект модель .

Свойства в продукте обрабатываются следующим образом:

  • Когда к свойству обращаются, чтобы просто прочитать его значение, оно ищется в цепочке областей действия. Поиск переменной начинается с продукта и выше до его прототипа. Если такая переменная найдена в поиске, поиск тут же останавливается, и возвращается значение. Если такая переменная не может быть найдена в цепочке областей действия, возвращается undefined.
  • Когда свойство записывается (изменяется), свойство всегда записывается в объекте product . Если продукт еще не имеет такого свойства, он неявно создается и записывается.

Такое связывание объектов с использованием свойства прототипа называется прототипным наследованием. Там так просто, согласен?

17
задан 25 June 2009 в 11:18
поделиться