【问题标题】:Is there an equivalent to Python-style class properties in ES6?ES6 中是否有与 Python 风格的类属性等价的东西?
【发布时间】:2016-03-09 23:32:30
【问题描述】:

Python 类具有这个简洁的特性,您可以使用 @property 装饰器来装饰类方法,这使得该方法显示为静态值成员而不是可调用的。例如,这个:

class A(object):

    def my_method(self):
        return "I am a return value."

    @property
    def my_property(self):
        return "I am also a return value."

导致以下行为:

>>> a = A()
>>> a.my_method()
'I am a return value.'
>>> a.my_property
'I am also a return value.'

最后,我的问题是:是否有任何内置语法可以在 ES6 类中提供类似的行为?我不是文档方面的专家(还),但到目前为止我还没有看到任何提供这种功能的东西。

【问题讨论】:

    标签: javascript python oop ecmascript-6


    【解决方案1】:

    是的,它被称为getter.

    class A {
      my_method() {
        return "I am a return value.";
      }
    
      get my_property() {
        return "I am also a return value.";
      }
    }
    

    【讨论】:

    • 感谢您快速简单的回答!我顺便看了这些,但没有连接到 @property 装饰器。
    【解决方案2】:

    要尝试正确封装,请使用私有变量(带有 __ 前缀 - 注意作为惯例,我使用 __ 表示私有,_ 表示受保护)并将您的私有变量与公共(getter)变量区分开来:

    export default class AssetHelper {
    
      __canvasWidth = 0;
    
      constructor() {
        this.__canvasWidth = 200;
      }
    
      get canvasWidth() {
        return this.__canvasWidth;
      }
    }
    

    然后在代码中的某个点...

    let assetHelper = new AssetHelper();
    console.log(assetHelper.canvasWidth)
    

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 2011-09-25
      • 1970-01-01
      • 2022-01-10
      • 2018-05-26
      • 2014-10-14
      • 2012-12-30
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多