我有一个原型,其中包含3个方法,如下所示,
ej.Ej3DRender = function () {
};
ej.Ej3DRender.prototype = {
matrix3D: function (size) {
mData += 3;
},
getIdentity: function () {
mData+=4;
},
turn: function (angle) {
mData+=6;
}
}
是否可以共享原型中所有方法共有的变量?在上面的代码中,我必须在所有方法中使用“mData”,那么在哪里可以声明它?它应该只能在这个原型中访问。
提前致谢
答案 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。
无法从原型访问特定于私有实例的成员。