作为类的函数-为私有属性创建getter和setter

Function as a class - create getters and setters for private properties

本文关键字:创建 属性 getter setter 函数      更新时间:2023-09-26

我认为,当创建一个新函数(表示一个类)时,在原型的帮助下定义额外的函数被认为是一个很好的实践。如果通过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中创建"类"私有属性的最佳方法是什么?

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

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