javascript中原型的私有号码

时间:2014-07-24 06:00:52

标签: javascript

我有一个原型,其中包含3个方法,如下所示,

ej.Ej3DRender = function () {


};
 ej.Ej3DRender.prototype = {

        matrix3D: function (size) {          

                mData += 3;
         },
        getIdentity: function () {
             mData+=4;
        },
        turn: function (angle) {
             mData+=6;
        }
    }

是否可以共享原型中所有方法共有的变量?在上面的代码中,我必须在所有方法中使用“mData”,那么在哪里可以声明它?它应该只能在这个原型中访问。

提前致谢

2 个答案:

答案 0 :(得分:0)

简短的回答是 - 不,你不能以正确的方式做到这一点。

答案很长:

您可以在funciton构造函数中将变量声明为私有var关键字,但其他函数必须在

中声明
ej.Ej3DRender = function () {
    var mData = 0;

    this.matrix3D = function(size) { mData += 3 };
    // .. other functions that access mData
};

请注意,这被认为是非常糟糕的做法,因为每个新创建的对象都会创建和附加函数。

在JavasScript中,接受私人会员使用下划线' _'作为前缀。您可以尝试这种方法(每次创建函数都不会遇到性能问题,变量将在内部显示'以及'在'原型之外但是它' 39; s以下划线为前缀,开发人员不应触及“'”以外的变量:

ej.Ej3DRender = function () {
    this._mData = 0;
};

ej.Ej3DRender.prototype = {
    matrix3D: function (size) {          
        this._mData += 3;
    },
    getIdentity: function () {
        this._mData += 4;
    },
    // ... other functions
}

答案 1 :(得分:0)

  

是否可以共享一个共同的变量   原型?

是的,这是可能的。如果值是共享的(不是特定于实例的)并且您需要将其设置为私有,则可以将需要它们的函数包装在IIFE中

var Test = function(){};
Test.prototype.notHavingTheVar=function(){
  console.log(typeof sharedPrivate);
}

//IIFE
;(function(){
  var sharedPrivate=22;
  Test.prototype.onePrivilegedFn=function(){
    console.log(++sharedPrivate);
  };
  Test.prototype.twoPrivilegedFn=function(){
    console.log(++sharedPrivate);
  };
}());
var t = new Test();
t.notHavingTheVar();//=undefined
t.onePrivilegedFn();//=22
t.twoPrivilegedFn();//=23
//it is shared so not instance specific
var t2 = new Test();
t2.twoPrivilegedFn();//=24 <<<====please note, it's shared

可以找到有关构造函数,原型和受保护实例特定成员的模式的更多信息here

无法从原型访问特定于私有实例的成员。