Getters可以设置私有变量

时间:2015-06-05 15:34:32

标签: javascript oop

我认为我在JavaScript中误解了一些有关OOP的内容。据我了解,设置私有变量及其自己的getter和setter函数的目的是保护它免受程序中其他地方的意外更改。但是我发现很容易使用他们的getter函数意外更改私有变量,这意味着我必须做错事。

id

2 个答案:

答案 0 :(得分:2)

该数组作为参考传递,因此在调用listNumbers() 时,您将实际数组返回到外部。您可以使用以下内容返回Array的副本:

function Phone(os) {
  this.os = os;
  var _phoneBook = []; // phoneBook is intended to be private
  this.newNumber = function(phoneNumber) { // set new number
    _phoneBook.push(phoneNumber);
  }
  this.listNumbers = function() { // get all numbers
    return _phoneBook.slice(0);
  }
}

答案 1 :(得分:0)

您可以考虑将函数listNumbers更改为类似enumerateNumbers的函数,该函数会为列表中的每个数字传递一个字符串,以隐藏内部数组,如下所示:

function Phone(os) {
  this.os = os;
  var _phoneBook = []; // phoneBook is intended to be private
  this.newNumber = function(phoneNumber) { // set new number
    _phoneBook.push(phoneNumber);
  }
  this.enumerateNumbers = function(cb) { // get all numbers
    for (var idx in _phoneBook) {
      cb(_phoneBook[idx]);
    }
  }
}

var andy = new Phone("Android");
andy.newNumber("555-123-4567");

andy.enumerateNumbers(function(num) { console.log(num); })