私人方法和领域

时间:2012-03-28 13:53:34

标签: javascript

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

1 个答案:

答案 0 :(得分:4)

执行私有功能的常用方法是使用各种“方法”关闭的功能,例如:拿起他们的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

私有字段,通常的方法是在构造函数中构建需要真正私有字段的任何东西,以便它们在构造函数的调用中关闭(私有)变量,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检索它。例如,它是真正私密的(除了我们明确允许bark返回它之外)。

如果您了解这方面的技术细节,我博客上的这些文章可能(或可能不)有用,因为当您进入私人职能部门时,您通常必须开始管理this:< / p>

如果你想要另一个东西来评估,那就是我的Lineage project,它同样是纯粹的原型继承,但是可以轻松访问父对象属性,函数等,以及一种主动鼓励私有范围的语法有点像。