首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Javascript中获取Getter函数

在Javascript中获取Getter函数
EN

Stack Overflow用户
提问于 2011-01-28 06:57:49
回答 4查看 8.8K关注 0票数 23

在JavaScript中,可以通过以下方式创建getters和setters:

代码语言:javascript
运行
复制
function MyClass(){
 var MyField;
 this.__defineGetter__("MyField",function(){
  return MyField;
 });
 this.__defineSetter__("MyField",function(value){
  MyField = value;
 });
}

但是有没有办法获得Getter或Setter函数呢?我的想法是这样的:

代码语言:javascript
运行
复制
var obj = new MyClass();
obj.__getSetter__("MyField")("MyValue");

在扩展基类时,我需要这样的功能。例如:类"a“有字段"a",类"B”从"A“扩展而来,也希望有一个字段"A”。要将值从“B”-field的"A"-object传递到"a"-field的“a”-object,我需要在重写它们之前获取setter/getter函数。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-28 07:06:17

老方法

自此问题首次发布以来,__defineGetter__defineSetter__一直处于弃用状态。

访问这些访问器和赋值器函数分别由__lookupGetter____lookupSetter__处理。

示例

代码语言:javascript
运行
复制
function MyClass() {
 var MyField
 this.__defineGetter__("MyField",function(){
  return MyField
 })
 this.__defineSetter__("MyField",function(value){
  MyField = value
 })
}

var obj = new MyClass()
obj.__lookupSetter__("MyField")("MyValue")
console.log(obj.MyField)

新的方式

当前创建动态访问器或赋值器的标准方法是使用Object.definePropertyObject.defineProperties

访问访问器和赋值器函数可以使用Object.getOwnPropertyDescriptorObject.getOwnPropertyDescriptors完成。

示例

代码语言:javascript
运行
复制
function MyClass() {
 let MyField
 Object.defineProperty(this, 'MyField', {
   get: () => MyField,
   set: value => {
     MyField = value
   }
 })
}

var obj = new MyClass()
Object.getOwnPropertyDescriptor(obj, 'MyField').set('MyValue')
console.log(obj.MyField)

ES6类

请注意,即使使用getset关键字,Object.getOwnPropertyDescriptor也可以正常工作,但是如果使用class关键字,则会遇到一些问题。

定义在class上的访问器和变更器不是该类实例的“自己的属性”。相反,它们属于该类的原型(class只是声明原型的语法糖)。

因为添加到类中的函数是添加到原型中的,所以在调用getter或setter时需要注意上下文。

代码语言:javascript
运行
复制
class MyClass {
  get MyField() {
    return this._myField
  }
  set MyField(value) {
    this._myField = value
  }
}

const obj = new MyClass()
Object.getOwnPropertyDescriptor(MyClass.prototype, 'MyField').set.call(obj, 'MyValue')
console.log(obj.MyField)

票数 21
EN

Stack Overflow用户

发布于 2014-12-22 10:14:28

实际上,__lookupGetter____lookupSetter__方法是不推荐使用的。而不是这些,您必须使用:

代码语言:javascript
运行
复制
/* __lookupGetter__ */
Object.getOwnPropertyDescriptor(obj, 'MyField').get;

/* __lookupSetter__ */
Object.getOwnPropertyDescriptor(obj, 'MyField').set;
票数 21
EN

Stack Overflow用户

发布于 2011-01-28 07:03:24

看看吧。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4822953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档