无法定义 set 和 get 方法
Posted
技术标签:
【中文标题】无法定义 set 和 get 方法【英文标题】:Can't define set and get methods 【发布时间】:2017-02-23 02:43:51 【问题描述】:尝试使用访问器定义属性时出现错误。这是我的代码
变种人 = ; Object.defineProperty(person, 'birthYear', 价值:1997, 可写:真, 可枚举:真, 可配置:假, 设置:函数(值) this.birthYear = 值; , 得到:函数() return '出生年份 - ' + this.birthYear; ); console.log(person.birthYear);错误文本:
属性描述符无效。不能同时指定访问器和值 或可写属性。
如果我无法定义这样的 set 和 get 方法,我该怎么做?
【问题讨论】:
您会删除value
,但您不想要一个检索this.birthYear
的birthYear
getter,因为这会产生无限递归。您需要将值存储在其他地方,例如不同的属性名称或符号,或变量中。
是否有理由在一个对象上定义属性,而不是the prototype
...仅供参考,您可以使用Object.create
一步完成该对象的创建/定义。
@SamOnela 因为没有在Object.prototype
上安装任意属性,而且问题中的对象没有任何其他原型?
【参考方案1】:
查看错误信息:
不能同时指定访问器和值或可写属性。
当您明确说明尝试编写属性时会发生什么时,说属性是否可写是没有意义的。
所以删除:
writable: true,
而且你不能给它一个值,当你读取它时动态计算的值,所以删除:
value: 1997,
然后你会得到一个关于递归的错误,因为每次你尝试读取person.birthYear
时,你的getter函数都会尝试读取person.birthYear
。
所以将值存储在其他地方。
var person = _birthYear: 1997 ;
Object.defineProperty(person, 'birthYear',
enumerable: true,
configurable: false,
set: function (value)
this._birthYear = value;
,
get: function()
return 'Birth year - ' + this._birthYear;
);
console.log(person.birthYear);
【讨论】:
以上是关于无法定义 set 和 get 方法的主要内容,如果未能解决你的问题,请参考以下文章
swift 基础小结02 -- VFL约束属性的get和set方法懒加载