Javascript:我应该隐藏我的实现吗?

Javascript:我应该隐藏我的实现吗?,javascript,oop,prototype,private-members,Javascript,Oop,Prototype,Private Members,作为一名C#程序员,我有一个习惯,那就是将可以而且应该是私有的东西私有化,当JS类型向我公开其所有私有部分时,我总是有一种奇怪的感觉(这种感觉不是“唤起”)。假设我有一个类型,它有一个draw方法,该方法在内部调用drabackground和drawForeground,它们自己调用是没有意义的。我应该如何实现这一点 选项1 Foo = function(){ this.draw(); }; Foo.prototype.draw = function(){ this.drawBac

作为一名C#程序员,我有一个习惯,那就是将可以而且应该是私有的东西私有化,当JS类型向我公开其所有私有部分时,我总是有一种奇怪的感觉(这种感觉不是“唤起”)。假设我有一个类型,它有一个
draw
方法,该方法在内部调用
drabackground
drawForeground
,它们自己调用是没有意义的。我应该如何实现这一点

选项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;

})();

当然,区别在于,在第一个示例中,
traffackground
drawForeground
方法是公共API的一部分,而在第二个示例中它们是对外隐藏的。这是可取的吗?我更喜欢哪一个?我将我的C#习惯应用于Javascript是错误的吗?我是否应该在Javascript中使所有内容都可扩展和重写?调用(this)对性能有什么影响

Perl开发人员中有一句名言出自著名的驼峰之书:“Perl模块希望您不要呆在客厅里,因为您没有被邀请,而不是因为它有猎枪。”。其原理是,如果您作为库的开发人员想要区分公共API和私有API,那就太好了。这样做并记录下来。代码的调用者应该知道哪个是哪个,但如果他们决定调用你认为他们不应该调用的东西,他们也可以像个白痴一样自由行事。从面向对象的背景来看,这是异端的,但对于脚本语言来说,这就是它们的运行方式


这个问题的答案有点主观,但我会告诉你,当我在写JavaScript时,如果我在.NET中编码,那么我的方法或变量将是私有的,我只是在它们前面加上类似“prv_u”或“p_u”或只是“u”。。。让你的船漂浮的东西。这样,你就告诉你的用户,这些东西应该是私有的,可以从它们下面改变。这样的话,如果他们选择调用你的私有方法,那么这些不确定的代码会像一个难缠的大拇指一样突出。

我可能误解了你的问题,但在选项1中,缺点/前景是公开的(即使你希望它们是私有的),所以要实现你想要的,只有选项2起作用。好吧,是的,这是我的问题,如果可以的话,我应该更喜欢将东西私有化吗?是的,我在ExtJS这样的框架中看到了很多,在这些框架中,东西被标记为
//private
,即使它们完全可以访问。在库中,前缀u似乎是最常用的做法。有些还使用注释或@private JSdoc注释。