如何在Javascript中创建一个私有且静态变量?
var Class = function() {
this.member = ...; //Public member
var member = ...; //Private member
}
Class.member = ...; //Public static member
//Private static member?
如何在Javascript中创建一个私有且静态变量?
var Class = function() {
this.member = ...; //Public member
var member = ...; //Private member
}
Class.member = ...; //Public static member
//Private static member?
function InitStatic(init)
{
var _class = this.constructor;
_class._getStatic = function()
{
if(arguments.callee.caller == _class) { return init; }
};
return init;
}
function DemoClass()
{
var _class = this.constructor, _private = { }, _public = this;
_private.Static = _class._getStatic ? _class._getStatic() : InitStatic.call(this, { Prop: "I am static.", Calls: 0 });
_public.Method = function()
{
return ++_private.Static.Calls;
};
}
var a = new DemoClass();
var b = new DemoClass();
console.log(a.Method()); // 1
console.log(b.Method()); // 2 !!
console.log(DemoClass._getStatic()); // undefined
static #myPrivateStaticMember = 1234;
var Class = (function() {
function Class(){
this.member = ...; // Public member
var member = ...; // Private member
}
Class.member = ...; // Public static member
var member = ...; // Private static member
return Class;
}());
var MemberClass = function() {
this.publicmember = 'Public Member'; //Public member
var member = ''; //Private member
MemberClass.staticVar = 'I am a static variable';
this.priviledgedFunction = function() { // Private function
member = 'I am a private variable';
return member;
}
}
现在要访问每个成员:
var obj = new MemberClass();
console.log(obj.publicmember) // public member is directly accessible with obj
console.log(MemberClass.staticVar) // To access the static variable
私有成员不能直接访问,但是你可以通过一个叫做特权函数的东西来访问它们。
console.log(obj.priviledgedFunction)
希望这能帮到你!