var MyClass = function () {
this._privateProp = ‘privateProp';
};
MyClass.prototype.getPrivateProp = function () {
return this._privateProp;
};
var my = new MyClass();
alert(my.getPrivateProp()); // ‘privateProp';
alert(my._privateProp); // 并未真正隐藏,依然弹出 ‘privateProp'
(function() {
var privateProp = Symbol(); // 每次调用会产生一个唯一的key
function MyClass() {
this[privateProp] = ‘privateProp'; // 闭包内引用到这个 key
}
MyClass.prototype.getPrivateProp = function () {
return this[privateProp];
};
})();
var my = new MyClass();
alert(my.getPrivateProp()); // ‘privateProp';
alert(my.privateProp); // 弹出 undefined,因为成员的key其实是随机字符串
(function() {
var privateStore = new WeakMap(); // 私有成员存储容器
function MyClass() {
privateStore.set(this, {privateProp: ‘privateProp'}); // 闭包内引用到privateStore, 用当前实例做 key,设置私有成员
}
MyClass.prototype.getPrivateProp = function () {
return privateStore.get(this).privateProp;
};
})();
var my = new MyClass();
alert(my.getPrivateProp()); // ‘privateProp';
alert(my.privateProp); // 弹出 undefined,实例上并没有 privateProp 属性
(function() {
var $private = createPrivate(); // 私有成员 token 函数,可以传入对象参数,会作为原型链上的私有成员
function MyClass() {
$private(this).privateProp = ‘privateProp' ; // 闭包内引用到privateStore, 用当前实例做 key,设置私有成员
}
MyClass.prototype.getPrivateProp = function () {
return $private(this).privateProp;
};
})();
var my = new MyClass();
alert(my.getPrivateProp()); // ‘privateProp';
alert(my.privateProp); // 弹出 undefined,实例上并没有 privateProp 属性
// createPrivate.js
function createPrivate(prototype) {
var privateStore = Symbol('privateStore');
var classToken = Symbol(‘classToken');
return function getPrivate(instance) {
if (!instance.hasOwnProperty(privateStore)) {
instance[privateStore] = {};
}
var store = instance[classToken];
store[token] = store[token] || Object.create(prototype || {});
return store[token];
};
}
function testFn(){
var _Name;//定义Javascript私有成员
this.setName = function(name){
_Name = name; //从当前执行环境中获取_Name
}
this.getName = function(){
return _Name;
}
}// End testFn
var test = testFn();
alert(typeof test._Name === "undefined")//true
test.setName("KenChen");
function testFn(name){
this.Name = name;
this.getName = function(){
return this.Name;
}
}
var test = new testFn("KenChen");
test.getName(); //KenChen
test.Name = "CC";
est.getName();//CC
function testFn(){
}
testFn.Name = "KenChen";
alert(testFn.Name);//KenChen
testFn.Name = "CC";
alert(testFn.Name);//CC
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有