Я понимаю, что цель методов, назначаемых в конструкторе как свойства "this", состоит в том, чтобы сделать их привилегированными, так как они могут обращаться к закрытым атрибутам и методам, подобным этому:
var Book = function(newFirst, newLast){
//private attributes
var author_first = newFirst;
var author_last = newLast;
//public attributes
this.puAuthor_first = newFirst;
this.puAuthor_last = newLast;
//public privileged methods (accessing private attributes)
this.getAuthor = function() {
return author_first + author_last;
}
}
но в чем отличие от объектов, которые наследуются от Book, по сравнению с методами, назначенными объекту-прототипу, следующим образом:
Book.prototype.nonPrivilegedGetAuthor = function() {
return this.puAuthor_first + this.puAuthor_last;
}
Итак, мой вопрос в 2 раза:
1) Когда этот объект наследуется через Prototypical Inheritance, оба getAuthor () и nonPrivilegedGetAuthor () наследуются, верно? И идея состоит в том, что getAuthor () будет скопирован в новый объект, тогда как nonPrivilegedGetAuthor () будет доступен через цепочку прототипов, с преимуществом не копироваться, верно? Каковы затраты, помимо невозможности получить доступ к частным пользователям?
2) А как насчет классического наследования? В частности, будет ли наследоваться общедоступный непривилегированный метод, назначенный в качестве свойства объекта-прототипа? Какие соображения я должен быть обеспокоен там? Не делая еще нескольких вещей, когда вы наследуете, вы в основном будете иметь пробел в цепочке прототипов, который пропускает один объект, верно? Мы должны соединить цепочку прототипов дочернего объекта с Книгой - как мы это делаем? Что мы делаем, чтобы правильно наследовать, и какие подводные камни могут случиться, если мы этого не сделаем?