是这样的,假设有两个对象,分别称为A,B吧,, 现在我的要求是:
对象A可以访问B的部分数据,但也只能是只读形式,
B对象自身可对自己的数据可读可写。
我想问的是应该如何实现:
我问的问题本质上是:javascript中一个对象如何控制自己的数据对外开放的权限。
迷茫2017-04-11 10:09:14
关于隐藏私有成员这个话题说简单有简单的解决办法,说复杂也有复杂的解决办法,各有优劣。
这是我以前写的一篇博客,
https://segmentfault.com/a/1190000003488631
前端时间发现另一个方法,还没考虑成熟,空了再写。不过基本思路都是“闭包”
阿神2017-04-11 10:09:14
function UserEntity() {
var userName = null;
var userProtoType = (function() {
var inside = false;
return {
"userName": {
get: function() {
return userName;
},
set: function(value) {
//设置条件,如果是没有满足设置的条件,则不允许set
if (!inside) {
return false;
}
userName = value;
}
},
setUserName: {
value: function(value) {
inside = true;
this.userName = value;
inside = false;
},
writable: false, // 只读
configurable: false // 不可配置
}
}
})();
Object.defineProperties(this, userProtoType);
}
UserEntity.prototype.setUserName = function(value) {
this.userName = value;
}
var arc = new UserEntity();
arc.userName = '张三' //外部设置
console.log(arc.userName);//输出:null
arc.setUserName('李四');//内部设置
console.log(arc.userName);//输出:李四