84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
是这样的,假设有两个对象,分别称为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
前端时间发现另一个方法,还没考虑成熟,空了再写。不过基本思路都是“闭包”