javascript - 隐私 : Underscored prototype properties or encapsulated variables?

标签 javascript instance-variables

有件事一直困扰着我,就像人们意识到了我没有意识到的事情一样。我正在看一个 FOSS 示例(下面进行了简化)...每当我有一个 JavaScript 类时,我更喜欢 Crockford 的变量隐藏方法:

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

不过,有些开发人员使用带下划线的私有(private)属性。

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);
}

我理解其中的区别,但冒着听起来很愚蠢的风险:其中一个比另一个有我没有看到的优势吗?我的意思是,我不喜欢“私有(private)”符号;他们不是私有(private)的。我意识到原型(prototype)链是在对象之间共享的,但它们是私有(private)的。由于无法在运行时更改所有对象的 x 和 y 或节省内存,我不确定原因。

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

最佳答案

如果您喜欢 Crockford 的作品,我建议您观看他的 JavaScript 系列,其中他描述了为什么他避免使用下划线并更喜欢驼峰符号。

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

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

关于javascript - 隐私 : Underscored prototype properties or encapsulated variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882596/

相关文章:

javascript - 如何使用 JQUERY 在不刷新页面的情况下对 PHP 循环进行排序

javascript - 在工厂设置数据并将其绑定(bind)到 Controller

javascript - Chrome 扩展程序事件选项卡和 console.log

python - 如何在 Python 中获取实例变量?

swift - 为什么 'self.self'在swift中编译运行?

oop - CoffeeScript 中的私有(private)成员?

ruby-on-rails - 在 Ruby 中,如何编写一个方法来显示任何对象的实例变量名称及其值

javascript - 追加时按钮不起作用

Java 实例初始化 block 和实例变量

javascript - Cockpit-CMS:如何访问简单 HTML 页面上的数据