javascript - 私有(private)方法和字段

标签 javascript

我正在评估 selfish想知道如何声明私有(private)方法/字段?

最佳答案

执行私有(private)函数的常用方法是使用各种“方法”关闭的函数,例如拿起他们的 Dog 例子,改变这个:

// The basic Dog example
var Dog = Base.extend({
  bark: function() {
    return 'Ruff! Ruff!'
  }
});

// Adding a private function
var Dog = Base.extend((function(){
  function trulyPrivate() {
    console.log(this.bark());
  }

  return {
    bark: function() {
      return 'Ruff! Ruff!'
    },
    logBark: function() {
        trulyPrivate.call(this);
    }
  };
})());

用法:

new Dog().logBark();  // logs "Ruff! Ruff!" using the truly private function behind the scenes

对于私有(private)字段,通常的方法是在构造函数中构建任何需要真正私有(private)字段的东西,以便它们在构造函数调用中关闭(私有(private))变量,a'la Crockford's pattern :

function Foo(arg) {
    var trulyPrivateData = arg;

    this.logIt = function() {
        console.log(trulyPrivateData);
    };
}

用法:

var f = new Foo(42);
f.logIt(); // logs 42 even though there's no way, externally, to get that value from `f`

...selfish 取消了实际的构造函数,但是 initialize 函数应该有相同的目的:

var Dog = Base.extend({
  initialize: function(arg) {
    var woof = arg || 'Ruff! Ruff!';
    this.bark = function() {
        return woof;
    };
  }
});

现在,您无法设置woof(构造时除外,因为我们是故意这样做的),您只能从bark 中检索它。例如,它是真正私有(private)的(除了我们明确允许 bark 返回它之外)。

如果你深入了解它的技术细节,我博客中的这些文章可能(或可能没有)有用,因为当你进入私有(private)函数等时,你通常必须开始管理this:

如果你想评估另一件事,这里是我的 Lineage project ,这同样是纯原型(prototype)继承,但可以轻松访问父对象属性、函数等,并且语法积极鼓励对此类事物使用私有(private)范围。

关于javascript - 私有(private)方法和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908971/

相关文章:

javascript - 如何在 Bootstrap 插件中以货币格式显示输入字段中的数字?

javascript - 动态列表和点击事件

Javascript内联onclick转到本地 anchor

java - Richfaces 树自掉落

javascript - 如何使硬件后退按钮成为退出应用程序

javascript - 修改对象数组中的对象属性

javascript - 在单击事件中使用 jQuery AJAX 时出现 "Exception: ... [nsIWebProgressListener::onStatusChange]"?

javascript - TypeScript 导出-导入约定

javascript - 从对象即数据创建多个元素

javascript - 在 jQuery 中动态隐藏选项卡中的元素