【问题标题】:What is the better way to access to a JavaScript Object property? [closed]访问 JavaScript 对象属性的更好方法是什么? [关闭]
【发布时间】:2020-03-22 16:44:32
【问题描述】:

在许多 OOP 语言中,要访问对象的属性,需要创建 get/set 方法。

这是我在java中的意思的一个例子

class MyClass{
    private int prop;
    public int getProp(){
        return this.prop;
    }
}

在 JavaScript 中,以“OOP 风格”访问对象属性还是直接访问更好?

class MyObj{
    constructor(a){
        this.a = a;
    }
    getA(){
        return a;
    }
}

o = new MyObj(1)
b = o.a //is this better?
b = o.getA() //or this?

【问题讨论】:

    标签: javascript oop object


    【解决方案1】:

    在 ES2015 中引入了 Javascript 类功能。

    该功能并非所有浏览器都完全支持(IE不支持,FF和Safari不支持私人会员加其他东西)。

    参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

    在更面向对象的方法中,当需要为特定属性执行特定逻辑时,最好使用 getter/setter,否则访问公共属性就可以了。

    参考: Are `getter` and `setter` necessary in JavaScript?

    class MyPerson {
        constructor(name, age){
            this._name = name;
            this.age = age;
        }
    
        get name(){
            return this._name.charAt(0).toUpperCase() + this._name.slice(1);
        }
    }
    
    p = new MyPerson("mike", 25)
    const personName = p.name;
    const personAge = p.age;
    

    【讨论】:

    • 私有变量的缺乏使它们毫无用处,除非您对 getter 中的变量进行某种处理。也许有一天 javascript 会在所有浏览器中使用它们。当最终让我们放手时,我感到头晕目眩。
    【解决方案2】:

    Javascript 没有像 Java 那样的公共/私有变量的含义,或者至少现在还没有(参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Class_fields)。 Javascript 并不是真正面向对象的。最近添加了类(ECMA Script 2015)。

    所以我想这只是一个选择问题。我相信绝大多数 javascript 开发人员直接访问属性而不定义 getter 和 setter。

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2019-09-05
      • 2021-11-26
      • 2015-06-08
      相关资源
      最近更新 更多