应该在JavaScript中使用setter/getter方法吗?

Should one use setter/getter methods in JavaScript

本文关键字:getter 方法 setter JavaScript      更新时间:2023-09-26

首先,这可能是基于主要意见的,所以我正在寻找技术原因普遍接受的最佳实践来做一件事或另一件事。

如果我写一个"Class"并创建它的一个成员,我可以像这样访问实例属性

function MyClass(){
  var self = this;
  self.foo = 'bar'
}   
var instance = new MyClass();
instance.foo = '420';
但是,我也可以创建一个方法来设置属性,这样就不需要了解所需的类的内部结构
MyClass.prototype.setFoo = function(prop){
  this.foo = prop;
};

考虑到职业发展,是否有理由更喜欢一个变体而不是另一个?

这是如何正确使用私有的一个很好的例子-使用作用域(在你的例子中,我可以在函数之外设置'access foo而不需要通过set'get函数):

function MyClass(){
    var foo = 'bar'; // private because of "scope"
    this.setfoo  = function(f) {
        foo = f;
    }
    this.getfoo = function() {
        return foo;
    }
}   
var instance = new MyClass();
console.log(instance.foo); // undefined
console.log(instance.getfoo()); // bar
instance.setfoo('a');
console.log(instance.getfoo()); // a

我建议您阅读Nicholas Zakas的Web开发人员专业Java脚本,从第90页开始。他非常清楚地解释了在Java Script中创建"类"的不同模式(工厂vs构造函数vs原型)。

我得到了所有我需要的信息,当我试图创建一些类前一段时间。我希望你能找到我需要的东西。

Amiros建议的问题在于,正如Nicholas Zakas所解释的那样,"每次myClass()函数被调用时,将创建一个名为setFoo()的new函数,这意味着每个对象都有自己的setFoo()版本,而实际上,每个对象应该共享相同的函数。

例如,

class1 = new MyClass();
class2 = new MyClass();
console.log(class1.setFoo == class2.setFoo); // false