应该在JavaScript中使用setter/getter方法吗?
Should one use setter/getter methods in JavaScript
首先,这可能是基于主要意见的,所以我正在寻找技术原因和普遍接受的最佳实践来做一件事或另一件事。
如果我写一个"Class"并创建它的一个成员,我可以像这样访问实例属性
function MyClass(){
var self = this;
self.foo = 'bar'
}
var instance = new MyClass();
instance.foo = '420';
但是,我也可以创建一个方法来设置属性,这样就不需要了解所需的类的内部结构
MyClass.prototype.setFoo = function(prop){
this.foo = prop;
};
考虑到职业发展,是否有理由更喜欢一个变体而不是另一个?
这是如何正确使用私有的一个很好的例子-使用作用域(在你的例子中,我可以在函数之外设置'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
我建议您阅读Nicholas Zakas的Web开发人员专业Java脚本,从第90页开始。他非常清楚地解释了在Java Script中创建"类"的不同模式(工厂vs构造函数vs原型)。
我得到了所有我需要的信息,当我试图创建一些类前一段时间。我希望你能找到我需要的东西。
Amiros建议的问题在于,正如Nicholas Zakas所解释的那样,"每次myClass()函数被调用时,将创建一个名为setFoo()的new函数,这意味着每个对象都有自己的setFoo()版本,而实际上,每个对象应该共享相同的函数。
例如,class1 = new MyClass();
class2 = new MyClass();
console.log(class1.setFoo == class2.setFoo); // false
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 如何防止在javascript中执行继承属性的getter-setter方法
- localStorage-对象的getter-, setter-方法的目的是什么?
- 使用getter和setter实现函数链接的方法
- 在标准ES6类中添加getter方法有意义吗
- JS是否可以具有与属性相同的getter和setter方法
- 任何重写参数的方法'getter/setter性质
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 具有自身内在价值的对象.另一种做getter的方法
- JS能够覆盖对象的Getter方法
- 从Sequelize getter方法访问关联表
- 构造函数、getter和setter方法中的Object.defineProperty
- 在getter之后调用Jquery方法
- 应该在JavaScript中使用setter/getter方法吗?
- 私有属性的通用setter/getter方法
- 为什么jquery getter css()方法和javascript返回不同的样式变量值
- 数组属性的JavaScript getter方法
- 在Vuex getter中使用组件道具的正确方法是什么