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

时间:2014-05-21 06:21:48

标签: javascript oop

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

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

function MyClass(){

  var self = this;

  self.foo = 'bar'

}   

var instance = new MyClass();

instance.foo = '420';

但是,我也可以创建一个设置属性的方法,这样就不需要了解所需类的内部结构

MyClass.prototype.setFoo = function(prop){
  this.foo = prop;
};

考虑到专业发展,是否有理由偏好另一种变体?

2 个答案:

答案 0 :(得分:5)

以下是如何正确使用私有的一个很好的示例 - 使用范围(在您的示例中,我可以在函数外部设置\ 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

这里是Fiddle

答案 1 :(得分:0)

我建议你阅读Nicholas Zakas's Professional Java Script for Web Developpers, starting page 90。他非常清楚地解释了不同的模式(Factory vs Constructor vs Prototype)来创建一个' Class'在Java Script中。

我在前一段时间尝试创建一些课程时获得了所需的所有信息。 我希望你找到需要的东西:)

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

例如,

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