我正在使用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);
但它引发了一个错误:
未捕获的TypeError:对象#的属性'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 */ }
};
答案 0 :(得分:8)
访问器不是作为对象属性的函数(“方法”),而是在该属性为assigned (set)或retrieved (get)时调用的函数。使用
dummy.nameAccessor = 'Mazinga';
调用setter函数。
相反,dummy.nameAccessor('Mazinga')
获取属性“nameAccessor”(导致名称字符串),然后尝试将其称为函数,这将失败。如果你的getter返回一个函数,它会工作,但这不是你想要的。
答案 1 :(得分:0)
dummy.nameAccessor
不是函数,它是字符串name value is: empty
。
答案 2 :(得分:-1)
您的方法语法不正确,请尝试:
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;}
};