Альтернативный способ обеспечения конфиденциальности данных в ES6 Class [duplicate]

Zhenghao He спросил: 10 мая 2018 в 04:47 в: javascript

У этого вопроса уже есть ответ:

  • Private properties in JavaScript ES6 classes 28 ответов

Я читал о конфиденциальности данных в JavaScript и как добиться этого в классе ES6. Я заметил это

class Person {
    constructor(name) {
        let _name = name
        this.setName = function(name) { _name = name; }
        this.getName = function() { return _name; }
    }
}

, тогда мы не можем получить доступ к _name, например

const p1 = new Person('bob');
p1._name = 'John';

, потому что _name не является частью свойств объекта. похоже, что он может обеспечить конфиденциальность данных. Но мне было интересно, если это хорошая практика.


1 ответ

Reda ответил: 10 мая 2018 в 05:06

Значительное большинство разработчиков знают, что ведущее подчеркивание является частной переменной, а не для общего использования API. Так что быть видимым или нет, не имеет большого значения. Если у вас есть геттеры и сеттеры для каждого отдельного объекта, действительно может быть слишком много шаблонов и, откровенно говоря, пустая трата времени.

Кроме того, this.setName и this.getName не прилагаются к цепочке прототипов, которая устраняет возможность почти любой оптимизации, например, возможность повторного использования методов класса между несколькими экземплярами.

Если вы хотите настоящую конфиденциальность, используйте фабричную функцию, а не класс.

И в ответ на ваш вопрос нет, как правило, не очень хорошая практика выписывать классы таким образом.

Дополнительное видео по вопросу: Альтернативный способ обеспечения конфиденциальности данных в ES6 Class [duplicate]

JavaScript OOP Crash Course (ES5 & ES6)

Основы ES6 #9: Классы

6.2: Classes in JavaScript with ES6 - p5.js Tutorial