JavaScript 语言不直接支持类或基于类的继承。
但是,JavaScript 中有许多类的实现。
我见过的所有实现都需要使用自调用函数来创建私有的、基于实例的、高效的函数。
函数具有隐私性
var foo = function(){ /* private to foo here */ };
但是如果你用它制作原型,你现在就有了公共的、基于实例的、高效的成员。
foo.prototype.func = function(){ /* private to func */ }; // foo.func in public now.
如果你像这样在 foo 中放置一个函数
var foo = function() {
var funcInner = function(){};
}; // funcInner is now re-defined in each call to foo. In-efficient.
你得到了缺少的隐私,但现在效率低下。
因此,拥有私有的、基于实例的、高效的函数的唯一方法是使用模块模式(或类似的自调用模式)。
var NS = (function(){
var private = function(){ /* code */ }; // only created once b.c. in module pattern.
var publik = {};
publik.funcPublic = function(){ /* code */ };
return publik;
})();
打电话
NS.funcPublic();
由此看来,要拥有私有的、基于实例的、高效的功能,需要少量的执行时间吗?
它是否正确?