如何只导出对象的方法?
定义一个文件: 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