如何只导出对象的方法?

定义一个文件: tc.js, 代码如下:

const tc={}
// 存放的数据
tc.data={}
// 以下是操作数据的方法
tc.method1=function(){}
tc.method2=function(){}
// ...
export default tc

需要调用者不可以访问tc.data, 可以在export上限制吗? 若是无法限制,该如何将tc.data对外只读,禁止调用者修改tc.data

阅读 2.7k
4 个回答

https://developer.mozilla.org...

类属性在默认情况下是公有的,但可以使用增加哈希前缀 # 的方法来定义私有类字段,这一隐秘封装的类特性由 JavaScript 自身强制执行。

也可以用Proxy来模拟

代理一下

const tc={}
tc.data={}
tc.method1=function(){}
tc.method2=function(){}

const handler = {
  get(target, prop){
    if(prop === 'data') return
    return Reflect.get(target, prop)
  }
}

const proxyTc = new Proxy(tc, handler)
export default proxyTc

这个data变量不作为tc的属性, 做为该js作用域下的全局变量好了, 这样就不会导出

通过使用Object.defineProperty()函数将obj对象的pro1属性修改为不可写,这样,通过对象的属性形式实现了只读变量
defineProperty接收三个参数

object(必须有,操作的对象本身)
propertyname(必须有,属性名,添加修改属性得有的属性名)
descriptor(必须有,属性描述)
descriptor内配置可有可无,value默认undefind,其余默认为false

设置属性的值:value
是否可操作属性值:writable
是否可修改配置:configurable如果值为false,descriptor内的属性不可操作
是否可枚举:enumerable

var obj = {pro1: 1};
    Object.defineProperty(obj, "pro1", {writable: false}); // 设置为不可写只可读
    obj.pro1 = 2;
    console.log(obj.pro1);//控制台显示1

使用对象属性的访问特性

 var obj = {pro1: 1};

       Object.defineProperty(obj, "pro1", {
// 这里可以只返回空
           get: function () {
               return 1;
           },
           set: function (newValue) {
               this.pro1 = 1
           }
       });

       obj.pro1 = 2;

       console.log(obj.pro1);//显示1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题