访问者:setter不起作用

Accessors: setter does not work

本文关键字:不起作用 setter 访问者      更新时间:2023-09-26

我正在玩Javascript访问器属性(我从零开始学习Javascript),试图为一个简单的对象创建getter和setter,这里的代码是:

var dummy = {
        name: 'empty',
        description: 'static description',
        get nameAccessor(){return 'name value is: ' + this.name;},
        set nameAccessor(value){ this.name = value;},
        get descAccessor(){return 'desccription value is: ' + this.description;},
};
console.log(dummy.nameAccessor);
console.log(dummy.nameAccessor('Mazinga'));
console.log(dummy.nameAccessor);

但它抛出了一个错误:

未捕获的类型错误:对象#的属性"nameAccessor"不是功能

当它执行setter代码时:

    console.log(dummy.nameAccessor('Mazinga'));

这里出了什么问题?

编辑

好吧,这似乎不是javascript的一个众所周知的特性,但我从Javascript:最终指南

var o = { 
          data_prop: value,
          get accessor_prop() { /* function body here */ },
          set accessor_prop(value) { /* function body here */ }
    };

访问器不是作为对象属性("方法")的函数,而是在分配(设置)或检索(获取)该属性时调用的函数。使用

dummy.nameAccessor = 'Mazinga';

调用setter函数。

相反,dummy.nameAccessor('Mazinga')获取属性"nameAccessor"(这会产生名称字符串),然后尝试将其作为函数调用,但会失败。如果getter返回一个函数,它会起作用,但这不是您想要的。

dummy.nameAccessor不是函数,而是字符串name value is: empty

您的方法语法不正确,请尝试:

var dummy = {
    name: 'empty',
    description: 'static description',
    getName : function(){return 'name value is: ' + this.name;},
    setName : function(value){ this.name = value;},
    getDesc : function(){return 'description value is: ' + this.description;}
};