我敢肯定,这肯定是一个很常见的问题,但是在搜寻了几个小时的互联网之后,我没有找到答案。这是问题:
假设我有一个称为哺乳动物的接口(interface)。每个哺乳动物都必须能够睡眠和进食。 (将来,我可能会为哺乳动物类抛出异常,以迫使 child 实现该功能)。
function Mammal() {};
Mammal.prototype.eat = function() {};
Mammal.prototype.sleep = function() {};
现在,假设我有一个实现哺乳动物类的Dog类:
function Dog() {};
Dog.prototype = new Mammal();
Dog.prototype.eat = function() {
...
};
Dog.prototype.sleep = function() {
...
};
狗的进食功能非常复杂,我想使用辅助功能。我还没有弄清楚做到这一点的最佳方法是什么。这里是考虑的要点:
问题:如何从原型(prototype)函数调用私有(private)函数?或更笼统地说:当一个对象(子对象)从另一个对象(父对象)继承时,子方法应如何使用辅助函数,并且有可能将其私有(private)化吗?
最佳答案
在闭包中定义您的Dog
“class”。然后,您可以共享特权功能。只是知道您在调用this
时必须格外小心。
var Dog = (function() {
function Dog() {};
// Common shared private function, available only to Dog.
var privateHelper = function() { ... };
Dog.prototype = new Mammal();
Dog.prototype.eat = function() {
privateHelper()
// Or this if the helper needs to access the instance.
// privateHelper.call(this);
...
};
return Dog;
})();
原型(prototype)上的功能仍然只是一个功能。因此,遵循与任何其他函数相同的作用域和闭包访问规则。因此,如果您定义了整个
Dog
构造函数和原型(prototype)以及一个作为自我执行功能的僻静的作用域孤岛,那么欢迎您随意共享而不暴露或污染公共(public)作用域。这正是CoffeeScript classes编译成JS的方式。
关于javascript - Javascript:从原型(prototype)方法调用私有(private)方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8580540/