V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xiaoming1992
V2EX  ›  程序员

ts 限制属性仅能在类和子类内部访问,实例不能访问,应该怎么做?

  •  
  •   xiaoming1992 · 2020-01-04 08:07:26 +08:00 via Android · 3204 次点击
    这是一个创建于 1819 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2020-01-04 13:46:49 +08:00
    谢谢大家,#2 同学说 protected,确实可以,谢谢了,已经找到了,不用再回答了
    16 条回复    2020-01-04 14:05:12 +08:00
    binux
        1
    binux  
       2020-01-04 08:18:13 +08:00
    private?
    binux
        2
    binux  
       2020-01-04 08:19:04 +08:00   ❤️ 1
    protected?
    Justin13
        3
    Justin13  
       2020-01-04 08:47:51 +08:00 via Android
    做不到
    creanme
        4
    creanme  
       2020-01-04 09:08:00 +08:00
    感觉你说的有点像 static 呢?
    xiaoming1992
        5
    xiaoming1992  
    OP
       2020-01-04 09:11:46 +08:00
    感谢大家,是 protected
    KuroNekoFan
        6
    KuroNekoFan  
       2020-01-04 09:12:09 +08:00 via iPhone
    云了一下感觉可以在 constructor 里用访问器
    H15018327040
        7
    H15018327040  
       2020-01-04 09:16:23 +08:00
    protected 权限的属性实例也能访问吧
    xiaoming1992
        8
    xiaoming1992  
    OP
       2020-01-04 10:28:26 +08:00 via Android
    @H15018327040 #7 可以吗?我看文档不能访问的啊(好像只是在 ts 的语法里限制访问,从 js 引用过来之后强行访问还是可以访问的,好像?我没看过转换后的源码,不过这就够了)
    giuem
        9
    giuem  
       2020-01-04 10:54:17 +08:00 via iPhone
    用 Symbol
    xiaoming1992
        10
    xiaoming1992  
    OP
       2020-01-04 11:19:02 +08:00
    @giuem 不太懂,用 Symbol 的话,难道是
    ```javascript
    const SymbolProp = Symbol("some prop")

    class A {
    [SymbolProp]: "some val";
    }
    ```
    如果是这样的话,我得把 SymbolProp 导出去,子类要用这个属性,还得从这儿导入才能用吗?那这样就有些麻烦了哦
    blindie
        11
    blindie  
       2020-01-04 11:19:30 +08:00
    H15018327040
        12
    H15018327040  
       2020-01-04 12:03:41 +08:00
    @xiaoming1992 protected 是父类子类都能访问,静态属性也能通过实例访问,暂时没有想到满足你需求的解决方案,或者说这个需求有问题。
    H15018327040
        13
    H15018327040  
       2020-01-04 12:10:58 +08:00
    @xiaoming1992 已找到方法,protected static _name 定义一个只在类和子类中不通过实例可以访问的属性,然后在类的构造函数中删除这个属性,那通过 new 产生的实例都没有这个属性,但是可以通过类访问。
    xiaoming1992
        14
    xiaoming1992  
    OP
       2020-01-04 13:44:40 +08:00 via Android
    @H15018327040 谢谢,protected 就可以啊
    H15018327040
        15
    H15018327040  
       2020-01-04 13:53:37 +08:00
    @xiaoming1992 protected 在实例中可以访问
    xiaoming1992
        16
    xiaoming1992  
    OP
       2020-01-04 14:05:12 +08:00
    @H15018327040 看文档说不可以,自己试了试,也确实不可以啊?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5607 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:40 · PVG 09:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.