Я читаю Javascript: The Good Parts и изо всех сил пытался разобраться с разделом о прототипах .
После небольшого гугла я пришел к выводу, что добавление свойств к объектам происходит после объявления объектов.
Используя этот скрипт из w3schools, я заметил, что удаление строки, добавляющей свойство prototype, не имеет никакого эффекта . Так в чем смысл?
//Prototyping
function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}
var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null; // <--- try removing this line
fred.salary=20000;
document.write (fred.salary);
javascript
prototyping
technique
Мягкий пух
источник
источник
Ответы:
Это не так, как работает прототип. Прототип используется в прототипе цепи.
Всякий раз, когда вы пытаетесь получить свойство объекта, он проверяет объект на имя этого свойства. Если его не существует, он будет выглядеть в прототипе.
Пример:
Таким образом, цель прототипа - просто повторное использование кода и наследование.
источник
prototype is undefined
---o.prototype.newProp = "mutts nuts";
o
- это объект..prototype
Свойство используется в функциях, игнорировать его. Просто сделайo.newProp = "mutts nuts"
Когда вы сделали,
fred.salary=20000
вы добавили атрибут зарплаты только для Фреда. При использовании прототипа все сотрудники, которых вы создадите, будут иметь атрибут зарплаты.Допустим, у вас есть 100 экземпляров сотрудников, и вы хотите добавить атрибут зарплаты для всех них. Вы можете сделать это вручную, перебрать каждого сотрудника и добавить его. Или вы можете использовать прототип и установить, если для всех из них.
Прототип полезен, когда вы хотите использовать функциональность для того, что уже существует. Допустим, вы хотите добавить собственный метод в массивы. Вы бы сделали что-то вроде:
С этого момента все массивы, которые вы создадите, будут иметь этот метод доступным.
источник
Возможно, вы захотите взглянуть на эту статью .
Если вы добавляете свойство к объекту, который используется в качестве прототипа для набора объектов, объекты, для которых он является прототипом, также получают новое свойство.
Это одно из главных преимуществ языка, основанного на прототипах, по сравнению с языками классов.
Кроме того, легко получить классическое наследование ОО с помощью JS, если это необходимо, но зачастую трудно получить модель-прототип для языка, который не реализует его по умолчанию.
источник