如何将存储在变量中的函数作为对象字面量的getter?
正确给对象添加getter的几种方式
哈哈,这个问题我刚上手对象语法的时候也踩过一模一样的坑!你写的{ get x: foofunc }确实不符合JS的语法规范,所以IDE会报错。下面给你两种常用且正确的实现方式:
1. 对象字面量中直接定义getter
如果是在创建对象的时候就添加getter,正确的语法是使用get 属性名() { ... }的形式。如果想复用你已经定义好的foofunc,可以在getter函数内部调用它,记得用call(this)绑定当前对象的上下文(避免this指向错误):
let foofunc = function() { return `当前对象的value是${this.value}`; }; const myObject = { value: 100, // 正确的getter写法 get x() { return foofunc.call(this); } }; console.log(myObject.x); // 输出:当前对象的value是100
2. 用Object.defineProperty动态添加getter
如果是给已经创建好的对象添加getter,Object.defineProperty是更灵活的选择,它可以直接把你的foofunc指定为getter函数:
let foofunc = function() { return "这是动态添加的getter返回值"; }; const myObject = {}; // 给myObject添加x属性的getter Object.defineProperty(myObject, 'x', { get: foofunc, enumerable: true, // 可选:设置该属性是否可被枚举(比如for...in遍历) configurable: true // 可选:设置该属性是否可被修改或删除 }); console.log(myObject.x); // 输出:这是动态添加的getter返回值
简单总结下:对象字面量里的getter必须用get 名() {}的语法,没法直接用get 名: 函数这种写法;如果要复用已有函数,要么在getter里调用它并绑定this,要么用Object.defineProperty直接把函数赋值给get配置项。
内容的提问来源于stack exchange,提问作者PopKernel
相关产品推荐
相关产品推荐

