是这样的,假设有两个对象,分别称为A,B吧,, 现在我的要求是:
对象A可以访问B的部分数据,但也只能是只读形式,
B对象自身可对自己的数据可读可写。
我想问的是应该如何实现:
我问的问题本质上是:javascript中一个对象如何控制自己的数据对外开放的权限。
是这样的,假设有两个对象,分别称为A,B吧,, 现在我的要求是:
对象A可以访问B的部分数据,但也只能是只读形式,
B对象自身可对自己的数据可读可写。
我想问的是应该如何实现:
我问的问题本质上是:javascript中一个对象如何控制自己的数据对外开放的权限。
关于隐藏私有成员这个话题说简单有简单的解决办法,说复杂也有复杂的解决办法,各有优劣。
这是我以前写的一篇博客,
https://segmentfault.com/a/1190000003488631
前端时间发现另一个方法,还没考虑成熟,空了再写。不过基本思路都是“闭包”
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);//输出:李四
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
写个访问控制方法不就解决了么?