84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
是这样的,假设有两个对象,分别称为A,B吧,, 现在我的要求是:
对象A可以访问B的部分数据,但也只能是只读形式,
B对象自身可对自己的数据可读可写。
我想问的是应该如何实现:
我问的问题本质上是:javascript中一个对象如何控制自己的数据对外开放的权限。
ringa_lee
写个访问控制方法不就解决了么?
常见的可以用IIFE做封装,export出来一些方法,get和set之类的。其实这种在我看来已经有点像Java了
EC5有有get和set方法,在创建对象的时候可以写好方法
setter&getter
关于隐藏私有成员这个话题说简单有简单的解决办法,说复杂也有复杂的解决办法,各有优劣。
这是我以前写的一篇博客,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);//输出:李四
写个访问控制方法不就解决了么?
常见的可以用IIFE做封装,export出来一些方法,get和set之类的。其实这种在我看来已经有点像Java了
EC5有有get和set方法,在创建对象的时候可以写好方法
setter&getter
关于隐藏私有成员这个话题说简单有简单的解决办法,说复杂也有复杂的解决办法,各有优劣。
这是我以前写的一篇博客,
https://segmentfault.com/a/1190000003488631
前端时间发现另一个方法,还没考虑成熟,空了再写。不过基本思路都是“闭包”