Javascript 能手和二传手的区别是什么?我的意思是,如果我互换使用它们是错误的吗?

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 () {

例如,在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;
他们用吸气剂。我将getter替换为setter,并运行相同的代码,它的运行方式完全相同。所以我有两个问题:

  • 为什么他们会在这里使用“get”
  • 在使用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
    未定义

  • 非常感谢,非常感谢。你现在对我说得很清楚了。显然,我不能把“接受答案”给两个人:(你可以随时改变被接受的答案,或者干脆不接受一个答案。在接受一个新答案之前,一个答案必须是不被接受的。