作为类的函数-为私有属性创建getter和setter
Function as a class - create getters and setters for private properties
我认为,当创建一个新函数(表示一个类)时,在原型的帮助下定义额外的函数被认为是一个很好的实践。如果通过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中创建"类"私有属性的最佳方法是什么?
不,如果你想要一个私有属性,根据定义,它是构造函数的局部变量,那么访问它的方法显然也必须在构造函数中定义。
许多人担心在原型上定义一次方法与在每个实例上定义一次方法的效率影响。这在十年前可能是一个有效的问题,或者在今天创建数千或数百万个对象的应用程序中。否则,实际上这不是您需要担心的事情。
相关文章:
- 创建属性值数组,其中属性名称以特定字符串结尾
- Do let语句在全局对象上创建属性
- 如何在 javascript 中为策略设计模式创建属性
- 如何在 JavaScript 中基于另一个对象动态创建属性和对象
- 在运行时为对象创建属性
- Javascript对象:动态创建属性和属性名称
- Javascript对象属性-如果不存在,则创建属性
- 如何在使用纯js创建属性时执行某些操作
- 自动创建属性不起作用
- TypeError:无法创建属性'mapTypeId'在字符串'无法加载映射'流星错误
- 可以在任何地方用Javascript创建属性吗?
- 什么时候在当前对象和原型上创建属性?
- 在文字对象中创建属性
- 使用JSON从对象数组创建属性数组
- 如何创建属性
- 如何使用JavaScript在SVG中创建属性
- 当ngAnnotate说“不能创建属性'$methodName'..”是什么意思?
- 无法创建属性'选择'在字符串'信息技术'angularjs
- 在ng模型中动态创建属性
- 如何在ng重复作用域内创建属性