getter 和 setter 之间有什么区别?我的意思是,如果我互换使用它们是错误的吗?
What is the difference between getters and setters? I mean, is it a mistake if I use them interchangeably?
例如在w3school.com有这样一段代码:
// Define object
var obj = {counter : 0};
// Define setters
Object.defineProperty(obj, "reset", {
get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
set : function (value) {this.counter -= value;}
});
// Play with the counter:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
他们使用吸气剂。我用 setter 和 运行 替换了 getters 相同的代码,它 运行 完全一样。所以我有两个问题:
- 他们为什么要在这里使用“get”?
- 在使用 getter 和 setter 时是否有传统上接受的方式(常规)?
不一样,如果访问一个属性就调用getter foo.bar
,如果设置一个属性就调用setterfoo.bar='baz'
使用 =
运算符。
// Define object
var obj = {counter : 0};
// Define setters
Object.defineProperty(obj, "reset", {
get : function () {console.log('get')},
set : function (value) {console.log('set')}
});
// Play with the counter:
obj.reset;// "get"
obj.reset=2;// "set"
是的,您可以滥用吸气剂来完成 setter 的工作,但您应该遵守以下约定:
set
在您使用赋值运算符 =
时激活。价值
赋值运算符右侧的将传递给
setter 作为参数,该参数的值应该赋值在某处。
get
当你请求一个值时激活,一个值应该总是返回,即使它是 null
或 undefined
.
例如在w3school.com有这样一段代码:
// Define object
var obj = {counter : 0};
// Define setters
Object.defineProperty(obj, "reset", {
get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
set : function (value) {this.counter -= value;}
});
// Play with the counter:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
他们使用吸气剂。我用 setter 和 运行 替换了 getters 相同的代码,它 运行 完全一样。所以我有两个问题:
- 他们为什么要在这里使用“get”?
- 在使用 getter 和 setter 时是否有传统上接受的方式(常规)?
不一样,如果访问一个属性就调用getter foo.bar
,如果设置一个属性就调用setterfoo.bar='baz'
使用 =
运算符。
// Define object
var obj = {counter : 0};
// Define setters
Object.defineProperty(obj, "reset", {
get : function () {console.log('get')},
set : function (value) {console.log('set')}
});
// Play with the counter:
obj.reset;// "get"
obj.reset=2;// "set"
是的,您可以滥用吸气剂来完成 setter 的工作,但您应该遵守以下约定:
set
在您使用赋值运算符=
时激活。价值 赋值运算符右侧的将传递给 setter 作为参数,该参数的值应该赋值在某处。get
当你请求一个值时激活,一个值应该总是返回,即使它是null
或undefined
.