私有JavaScript函数 - this.name与var名称

时间:2014-01-22 15:56:40

标签: javascript naming-conventions

如果我在一个类中使用某些私有函数,某些命名约定会产生更好的性能或提供不同的功能......还是仅仅是一个偏好问题?

var MyClass = function() {

   var private1 = function(msg){
       // Do stuff.
       console.log(msg);
   };

   this.private2 = function(msg) {
       // Do stuff.
       console.log(msg);
   };

};

2 个答案:

答案 0 :(得分:2)

您的两个变量具有非常不同的访问权限,因此使用哪个变量取决于您要提供的访问类型,而不仅仅是编码样式首选项。

在您的示例中,private1是构造函数的局部变量,仅对构造函数内的代码可用。它不适用于构造函数之外的任何代码。它实际上是私人的。

var yourObj = new MyClass();
yourObj.private1();   // undefined, will not work

private2是您使用MyClass运算符创建的new对象的实例变量,可由任何代码yourObj.private2()访问。它不以任何方式私有 - 它是一种可公开访问的方法。例如:

var yourObj = new MyClass();
yourObj.private2();     // works

因此private1是私有的,private2是公开的。应该选择与代码的期望目标匹配的实现方法。这不仅仅是一种编码风格偏好。

答案 1 :(得分:1)

private1是构造函数MyClass中的函数,private2是MyClass实例的函数:

var cl = new MyClass();
console.log(cl.private1); // undefined
console.log(cl.private2); // function