如何只导出对象的方法?

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

const tc={}

// 存放的数据

tc.data={}

// 以下是操作数据的方法

tc.method1=function(){}

tc.method2=function(){}

// ...

export default tc

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


回答:

可以参考这篇文章JS 私有属性的 6 种实现方式,你用过几种?

或者像楼上说的直接用 es2022#前缀,不过这个得配置babel


回答:

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

以上是 如何只导出对象的方法? 的全部内容, 来源链接: utcz.com/p/933638.html

回到顶部