作为类的功能 - 为私有属性创建getter和setter

时间:2015-10-14 12:34:21

标签: javascript prototype

我想方法,在创建一个新函数(代表一个类)时,在原型的帮助下定义附加函数被认为是一种很好的做法。如果函数是通过现有函数中的this声明的,则会为每个实例创建它们,这是我们不一定需要的。

所以,我的问题是 - 如果我想要一个完全私有的属性并且只能通过getter和setter访问,那么甚至可以通过使用原型实现这一点吗?

以下是一个例子:

function Item() {
  var title = '';

  this.setTitle = function(_title) {
    title = _title;
  };

  this.getTitle = function() {
    return title;
  };
}

var car = new Item();
car.setTitle('car');

console.log(car.getTitle()); //car
console.log(car.title); // undefined

/*
  Alternative
*/

function _Item() {
  this.title = '';
}

_Item.prototype.setTitle = function(_title){
  this.title = _title;
};

_Item.prototype.getTitle = function() {
  return this.title;
};

var _car = new _Item();
_car.setTitle('car 2');
console.log(_car.getTitle()); // car
console.log(_car.title); // car

从上面的例子可以看出,在Item的情况下,我在函数中声明了getter和setter - 这不是一个好习惯。但通过这种方式,我设法将title属性保密。但是,在_Item的情况下,我使用原型方法,这是首选,但我的title属性根本不是私有的。

那么,在JavaScript中创建“类”的私有属性的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

不,如果你想要一个私有属性,根据定义它是构造函数的局部变量,那么显然访问它的方法也必须在构造函数中定义。

许多人担心在原型上定义一次方法的效率影响,而不是在每个实例上定义一次。这可能是十年前或今天在创建数千或数百万个对象的应用程序中的有效问题。否则,实际上这不是你需要担心的事情。