Я уверен, что это должен быть довольно распространенный вопрос, но после протравливания интернетов в течение нескольких часов я не нашел ответа. Вот вопрос:
Предположим, что у меня есть интерфейс, называемый млекопитающим. Каждый млекопитающий должен уметь спать и есть. (В будущем я могу бросить исключения для класса Mammal, чтобы заставить детей реализовать эту функцию).
function Mammal() {};
Mammal.prototype.eat = function() {};
Mammal.prototype.sleep = function() {};
Теперь предположим, что у меня есть класс Dog, который реализует класс Mammal:
function Dog() {};
Dog.prototype = new Mammal();
Dog.prototype.eat = function() {
...
};
Dog.prototype.sleep = function() {
...
};
Функция щенка собаки очень сложна, и я хотел бы использовать вспомогательную функцию. Я не смог понять, что лучший способ сделать это. Вот точки зрения:
- Вспомогательная функция никогда не должна вызываться извне класса собаки, поэтому в идеале она должна быть частной.
- Функция eat не имеет доступа к закрытым функциям (прототипы не имеют доступа к закрытым функциям)
- Я мог бы помещать вспомогательную функцию в функцию с привилегией, но:
- Это все равно будет публичной функцией → то есть: каждый имеет право называть ее
- Это не будет частью прототипа, поэтому каждая собака должна иметь свою собственную вспомогательную функцию. Если было много собак, это кажется неэффективным.
- Я не могу сделать функцию eat функцией privaliged, потому что для того, чтобы наследование прототипа работало, оно должно быть частью прототипа.
Вопрос: Как я могу вызвать частную функцию из функции прототипа? Или в более общем смысле: когда объект (дочерний объект) наследует от другого объекта (родительский объект), как следует использовать методы-пользователи с помощью вспомогательных функций и возможно ли сделать их частными?