【问题标题】:Accessors: setter does not work访问器:setter 不起作用
【发布时间】:2012-08-30 10:38:13
【问题描述】:

我正在使用 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: Definitive Guide

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

【问题讨论】:

  • 对象属性始终可见。那里不需要吸气剂。您可能想要做的是使用一个函数并在 return 语句中公开一些变量。

标签: javascript


【解决方案1】:

访问器不是作为对象属性的函数(“方法”),而是当该属性为assigned (set)retrieved (get) 时调用的函数。使用

dummy.nameAccessor = 'Mazinga';

调用setter函数。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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;}
      
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 2014-05-29
        • 1970-01-01
        相关资源
        最近更新 更多