作为一个C#程序员,我有一点使事情私募认为可以而且应该成为私人的习惯,我总是得到一个奇怪的感觉,当一个JS类型公开其所有的私处,我(那感觉是不是“引起“)。说我有具有draw
方法,它在内部调用drawBackground
和drawForeground
,这没有任何意义,以对自己称为一个类型。我应该如何实现这一点?Javascript:我应该隐藏我的实现吗?
选项1
Foo = function(){
this.draw();
};
Foo.prototype.draw = function(){
this.drawBackground();
this.drawForeground();
};
Foo.prototype.drawBackground = function(){};
Foo.prototype.drawForeground = function(){};
选项2
Foo = (function(){
var constructor = function(){
this.draw();
};
var drawBackground = function(){};
var drawForeground = function(){};
constructor.prototype.draw = function(){
drawBackground.call(this);
drawForeground.call(this);
};
return constructor;
})();
的差,当然,作为在第一实施例中,drawBackground
和drawForeground
方法是公共API的一部分,而第二个则隐藏在外面。这是可取的吗?我应该选择哪一个?我错误的是将我的C#习惯应用于Javascript,并且我应该让所有的东西都可扩展并且可以在Javascript中重载吗? .call(this)
的性能影响是什么?
我大概misundertood你的问题,但在方案1中drawBackground/drawForeground是公共的(即使你希望他们是私有的),所以达到你想要只选择2名的作品是什么。 – 2010-07-10 22:05:47
嗯,是的,那是我的问题,我应该在什么时候让事情私下化? – JulianR 2010-07-10 22:13:09