我确信这一定是一个非常常见的问题但是在对互联网进行了几个小时的搜索之后,我还没有找到答案.这是一个问题:
假设我有一个名为哺乳动物的界面.每个哺乳动物都必须能够入睡和进食.(将来我可能会抛出Mammal类的异常来强制孩子实现这个功能).
function Mammal() {};
Mammal.prototype.eat = function() {};
Mammal.prototype.sleep = function() {};
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个实现Mammal类的Dog类:
function Dog() {};
Dog.prototype = new Mammal();
Dog.prototype.eat = function() {
...
};
Dog.prototype.sleep = function() {
...
};
Run Code Online (Sandbox Code Playgroud)
狗的吃功能非常复杂,我想使用辅助功能.我无法弄清楚最好的办法是什么.以下是要点:
问题:如何从原型函数调用私有函数?或者更一般地说:当一个对象(子对象)继承自另一个对象(父对象)时,子方法应该如何使用辅助函数,是否可以使这些私有?
Ale*_*yne 36
Dog
在闭包中定义你的"类".然后你可以拥有共享的priveliged功能.只要知道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;
})();
Run Code Online (Sandbox Code Playgroud)
原型上的函数仍然只是一个函数.因此,遵循与任何其他函数相同的范围和闭包访问规则.因此,如果您定义整个Dog
构造函数和原型以及作为自执行函数的隐蔽范围岛,欢迎您在不暴露或污染公共范围的情况下尽可能多地共享.
这正是CoffeeScript类编译成JS的方式.