隐私:突出显示原型属性或封装变量?

时间:2011-02-03 04:05:23

标签: javascript instance-variables

有些东西一直困扰着我,就像人们意识到我不知道的东西一样。我正在看一个FOSS示例,(简化如下)...每当我有一个JavaScript类时,我更喜欢Crockford的变量隐藏方法:

var MyObject = function(handler) {
  var x = 1, y = 2;
  function myFunction() {
    handler(x + y);
  }
  return {
    "myFunction" : myFunction
  }
}

但是,有些开发人员使用强调私有属性。

var MyObject = function(handler) {
  this._handler = handler;
}
MyObject.prototype._x = 1;
MyObject.prototype._y = 2;
MyObject.prototype.myFunction = function() {
  this._handler(this._x + this._y);
}

我理解这种差异,但冒着听起来很愚蠢的风险:一个人比另一个人更有优势吗?我的意思是,我不喜欢“私人”符号;他们不是私人的。我意识到原型链是在对象之间共享的,但它们是私有的。如果没有在运行时改变所有对象的x和y,或者保存内存,我不确定原因。

我确信这是有充分理由的,但是如果有人想要进一步启发我,那就太棒了。

2 个答案:

答案 0 :(得分:0)

使用_表示法的三个原因:

  1. 如您所述,效果。每种结构都不会重新创建功能。
  2. 调试即可。在运行时很容易查看对象的所有属性。
  3. 结构即可。很容易将部分代码分解为不同的文件,或者继承子“类”中的属性。通过闭包私有的变量限制了您组织代码的方式。这与类似类似于在OOP语言中使用protected / friend变量与私有变量的参数。
  4. 在任何一个方向上都有其他论点,但它更具哲学性 - 关于是否信任程序员使用您的代码或执行“良好实践”,但我不会去那里;)

答案 1 :(得分:0)

如果你喜欢Crockford的作品,我建议观看他的JavaScript系列,在那里他描述了为什么他避免使用下划线并喜欢camelNotation。

http://www.yuiblog.com/crockford/

要直接回答您的问题,使用下划线没有性能优势,它只是一种编程风格偏好。