Javascript 能手和二传手的区别是什么?我的意思是,如果我互换使用它们是错误的吗?
例如,在w3school.com上有一段代码:Javascript 能手和二传手的区别是什么?我的意思是,如果我互换使用它们是错误的吗?,javascript,object,getter,setter,Javascript,Object,Getter,Setter,例如,在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 () {
// 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;
他们用吸气剂。我将getter替换为setter,并运行相同的代码,它的运行方式完全相同。所以我有两个问题:
这是不一样的,如果访问属性
foo.bar
,则调用getter;如果使用=
运算符设置属性foo.bar='baz'
,则调用setter
//定义对象
var obj={计数器:0};
//定义设置器
Object.defineProperty(obj,“重置”{
get:function(){console.log('get')},
set:function(value){console.log('set')}
});
//玩柜台:
对象重置;//“得到”
对象重置=2;//“set”
是的,您可以滥用getter来完成setter的工作,但您应该遵守以下惯例:
设置
激活。价值
在赋值的右侧,运算符将传递给
setter作为参数,该参数的值应该分配到某个地方get
激活请求值时,应始终返回值,即使该值为null
或未定义
非常感谢,非常感谢。你现在对我说得很清楚了。显然,我不能把“接受答案”给两个人:(你可以随时改变被接受的答案,或者干脆不接受一个答案。在接受一个新答案之前,一个答案必须是不被接受的。