首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在ES6 javascript类的泛型方法中获取所有getter setter属性的列表或数组?

在ES6 JavaScript类的泛型方法中,可以通过使用Object.getOwnPropertyDescriptors()方法来获取所有getter和setter属性的列表或数组。

具体步骤如下:

  1. 首先,创建一个泛型方法,可以接受任意类作为参数。
代码语言:javascript
复制
function getAllGettersSetters(clazz) {
  // 获取类的原型对象
  const prototype = clazz.prototype;
  
  // 获取类的所有属性描述符
  const descriptors = Object.getOwnPropertyDescriptors(prototype);
  
  // 创建一个空数组,用于存储所有的getter和setter属性
  const gettersSetters = [];
  
  // 遍历属性描述符对象
  for (const key in descriptors) {
    // 获取属性描述符
    const descriptor = descriptors[key];
    
    // 判断属性是否具有getter或setter方法
    if (descriptor.get || descriptor.set) {
      // 将属性名称添加到数组中
      gettersSetters.push(key);
    }
  }
  
  // 返回包含所有getter和setter属性的数组
  return gettersSetters;
}
  1. 使用该泛型方法来获取指定类的所有getter和setter属性。
代码语言:javascript
复制
class MyClass {
  constructor() {
    this._name = 'John';
    this._age = 25;
  }
  
  get name() {
    return this._name;
  }
  
  set name(value) {
    this._name = value;
  }
  
  get age() {
    return this._age;
  }
  
  set age(value) {
    this._age = value;
  }
}

const gettersSetters = getAllGettersSetters(MyClass);
console.log(gettersSetters); // 输出:['name', 'age']

在上述代码中,我们定义了一个名为getAllGettersSetters()的泛型方法,它接受一个类作为参数。该方法通过获取类的原型对象,并使用Object.getOwnPropertyDescriptors()方法获取类的所有属性描述符。然后,我们遍历属性描述符对象,判断每个属性是否具有getter或setter方法,如果是,则将属性名称添加到gettersSetters数组中。最后,返回包含所有getter和setter属性的数组。

对于上述代码中的MyClass类,它具有nameage两个属性,每个属性都有对应的getter和setter方法。通过调用getAllGettersSetters()方法,并传入MyClass类作为参数,我们可以获取到包含所有getter和setter属性的数组['name', 'age']

请注意,以上代码仅适用于获取类的实例属性的getter和setter属性。如果需要获取类的静态属性的getter和setter属性,可以通过类的构造函数来获取属性描述符,并进行相应的处理。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

了不起 TypeScript 入门教程

支持模块、和接口 不支持模块,接口 支持 ES3,ES4,ES5 和 ES6 等 不支持编译其他 ES3,ES4,ES5 ES6 功能 社区支持仍在增长,而且还不是很大 大量社区支持以及大量文档和解决问题支持...在 JavaScript 是没有元组,元组是 TypeScript 特有的类型,其工作方式类似于数组。 元组可用于定义具有有限数量未命名属性类型。每个属性都有一个关联类型。...所以成员方法满足重载条件是:在同一个方法名相同且参数列表不同。...TypeScript 可访问性修饰符( public private); 私有字段不能在包含之外访问,甚至不能被检测到。...设计关键目的是在成员之间提供有意义约束,这些成员可以是:实例成员、方法、函数参数和函数返回值。 (Generics)是允许同一个函数接受不同类型参数一种模板。

7K52

深入浅出Vue响应式原理

方法1.Object.defineProperty实现 Vue通过设定对象属性 setter/getter 方法来监听数据变化,通过getter进行依赖收集,而每个setter方法就是一个观察者,在数据变更时候通知订阅者更新视图...不过这种方式有几个注意点需补充说明: 无法检测到对象属性添加删除(data.location.a=1)。...这是因为 Vue 通过Object.defineProperty来将对象key转换成getter/setter形式来追踪变化,但getter/setter只能追踪一个数据是否被修改,无法追踪新增属性和删除属性...但有些数组操作Vue时拦截不到,当然也就没办法响应,比如: obj.length-- // 不支持数组长度变化 obj[0]=1 // 修改数组第一个元素,也无法侦测数组变化 ES6提供了元编程能力...当数据发生变化时,会循环依赖列表,把所有的Watcher都通知一遍。

95411
  • TypeScript基础常用知识点总结

    TypeScript— TypeScript 是面向对象 JavaScript描述了所创建对象共同属性方法。...TypeScript 支持面向对象所有特性,比如 、接口等, ES6语法也有class概念。...ES6 用法 属性方法 使用 class 定义,使用 constructor 定义构造函数。通过 new 生成新实例时候,会自动调用构造函数。...修饰符 作用 public 修饰属性方法是公有的,可以在任何地方被访问到,默认所有属性方法都是 public private 修饰属性方法是私有的,不能在声明它外部访问 protected...TypeScript— 是指在定义函数、接口时候,不预先指定具体类型,而在使用时候再指定类型一种特性。

    4.8K30

    Java 编程技巧之数据结构

    以支撑为例,定义通用支撑: /** 通用支撑 */ @Getter @Setter @ToString public class GenericHolder { /**...代替具体类型实参,可以把"?"看成所有类型。当具体类型不确定时候,可以使用通配符 "?";当不需要使用类型具体功能,只使用Object功能时,可以使用通配符 "?"。...在使用时候,我们还可以为传入类型实参进行上下界限制,:类型实参只准传入某种类型某种类型子类。...extends A> 列表,不能添加 A A 子类对象,只能获取A对象。 下界通配符(super): 下界通配符为”super”,可以接受其指定类型其父作为参。例如:List 列表,能够添加 A A 子类对象,但只能获取 Object 对象。

    1.8K10

    .NET静态代码织入——肉夹馍(Rougamo)发布2.0

    在1.x版本MoAttribute是不能直接应用到属性,只能应用到gettersetter上,现在直接应用到属性上是同时应用到gettersetter上。...除了能够直接将MoAttribute应用到属性方法上,在将MoAttribute应用到程序集时也可以通过Flags属性来选择到属性和构造方法。...getter, setter, property分别表示匹配属性getter, setter和全部匹配(getter+setter),method表示匹配普通方法(非getter/setter/constructor...),execution表示匹配所有方法,包含getter/setter。...,方法/属性名称,名称可以使用*进行模糊匹配,比如*Async,Get*,Get*V2等,*匹配0多个字符 [parameters],方法参数列表,Rougamo参数列表匹配相对简单,没有aspectj

    25620

    《你不知道JavaScript(上)之原型对象》读书笔记

    数组也是对象一种类型,具备一些额外行为。数组内容组织方式比一般对象要 稍微复杂一些。内置对象JavaScript 还有一些对象子类型,通常被称为内置对象。...【Getter】& 【Setter】对象默认 [[Put]] 和 [[Get]] 操作分别可以控制属性设置和获取。...在 ES5 可以使用 gettersetter 部分改写默认操作,但是只能应用在单个属性上,无法 应用在整个对象上。getter 是一个隐藏函数,会在获取属性值时调用。...所有普通对象都有内置 Object.prototype,指向原型链顶端(比如说全局作用域), 果在原型链找不到指定属性就会停止。...虽然这些 JavaScript 机制和传统面向语言中初始化”和“继承”很相似,但 是 JavaScript 机制有一个核心区别,那就是不会进行复制,对象之间是通过内部 [[Prototype

    64130

    Java 编程技巧之数据结构

    以支撑为例,定义通用支撑: /** 通用支撑 */ @Getter @Setter @ToString public class GenericHolder { /**...代替具体类型实参,可以把"?"看成所有类型。当具体类型不确定时候,可以使用通配符 "?";当不需要使用类型具体功能,只使用Object功能时,可以使用通配符 "?"。...在使用时候,我们还可以为传入类型实参进行上下界限制,:类型实参只准传入某种类型某种类型子类。...extends A> 列表,不能添加 A A 子类对象,只能获取A对象。 下界通配符(super): 下界通配符为”super”,可以接受其指定类型其父作为参。例如:List 列表,能够添加 A A 子类对象,但只能获取 Object 对象。

    1.2K10

    从java到JavaScript(2):对比JavaGoSwiftRust看Dart

    基本类型Dart中所有都是Object子类。int和double是num子类。没有float类型。String可以使用单引号或者双引号。...所有函数都返回一个值,如果没有指定返回值,则 默认把语句 return null; 作为函数最后一个语句执行。可以把方法当做参数调用另一个方法方法也可以赋值给一个变量操作符??...minix,对于前段,react与vue框架,对这个应该非常熟悉settergetter很多语言里面,为了方便获取属性都提供了settergetter。其实他就是个语法糖。直接使用就可以。...异步dart异步和JavaScript ES6差不多,使用await和async,只不过ES6Promise变成了Future。...,非常适合构建网络应用程序,这是正确,如果你不需要其他功能,

    91410

    TypeScript学习笔记(四)—— TypeScript提高

    五、 传统方法JavaScript 通过构造函数实现概念,通过原型链实现继承。而在 ES6 ,我们终于迎来了 class。...TypeScript 除了实现了所有 ES6 功能以外,还添加了一些新用法。 这一节主要介绍用法,下一节再介绍如何定义类型。...public 修饰属性方法是公有的,可以在任何地方被访问到,默认所有属性方法都是 public  private 修饰属性方法是私有的,不能在声明它外部访问 protected 修饰属性方法是受保护...七、 (Generics)是指在定义函数、接口时候,不预先指定具体类型,而在使用时候再指定类型一种特性。...7.3、约束 在函数内部使用变量时候,由于事先不知道它是哪种类型,所以不能随意操作它属性方法: function loggingIdentity(arg: T): T {

    2.5K10

    ES6--Class、Module及常用特性

    '(' + this.x + ', ' + this.y + ')'; } } var p = new Point(1, 2); 实际上,所有方法都定义在prototype属性上面;在实例上面调用方法...)和存值函数(setter) 在Class内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性存取行为。...ES6并没有支持,但是可以通过一些约定方式去实现 方式一:通过命名区分,函数名增加”_” 方式二:通过Symbol值唯一性 const method = Symbol('sayName'...问题 (1)不支持私用属性,只能通过一些约定实现 (2)不支持实例属性,只能通过Getter/Setter实现 (3)不支持多重继承 十九、Module ​ ES6 模块设计思想,是尽量静态化...My age is 26. */ ### find/findIndex JavaScript 提供了 Array.prototype.indexOf方法,用来获取一个元素在数组索引,但是 indexOf

    31040

    ES6--Class、Module及常用特性

    '(' + this.x + ', ' + this.y + ')'; } } var p = new Point(1, 2); 实际上,所有方法都定义在prototype属性上面;在实例上面调用方法...)和存值函数(setter) 在Class内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性存取行为。...ES6并没有支持,但是可以通过一些约定方式去实现 方式一:通过命名区分,函数名增加”_” 方式二:通过Symbol值唯一性 const method = Symbol('sayName'...问题 (1)不支持私用属性,只能通过一些约定实现 (2)不支持实例属性,只能通过Getter/Setter实现 (3)不支持多重继承 十九、Module ​ ES6 模块设计思想,是尽量静态化...My age is 26. */ ### find/findIndex JavaScript 提供了 Array.prototype.indexOf方法,用来获取一个元素在数组索引,但是 indexOf

    57131

    Object (对象)

    (type)或者(class),比如 Java String 。...很重要一点是,所有 方法创建都是浅不变形,也就是说,它们只会影响目标对象和它直接属性。如果目标对象引用了其他对象(数组、对象、函数,等),其他对象内容不受影响,仍然是可变。...如果都不是,将该值设置为属性值。 # GetterSetter 在 ES5 可以使用 gettersetter 部分改写默认操作,但是只能应用在单个属性上,无法应用在整个对象上。...getter 是一个隐藏函数,会在获取属性值时调用。setter 也是一个隐藏函数,会在设置属性值时调用。...使用 for..in 遍历对象是无法直接获取属性,因为它实际上遍历是对象所有可枚举属性,需要手动获取属性值。 那么如何直接遍历值而不是数组下标(或者对象属性)呢?

    61310

    Vue 全家桶、原理及优化简议

    注:mapGetters 工具函数会将 store getter 映射到局部计算属性。它功能和 mapState 非常类似。...当程序员把一个普通 JavaScript 对象传给 Vue 实例 data 选项,Vue 将遍历此对象所有属性,并使用 Object.defineProperty 把这些属性全部转为 getter/...如上所求,每个vue组件实例都有相应 watcher 实例对象,它会在vue组件渲染过程把需要用到属性getter)记录为依赖。...那么,如何在setter里面触发所有绑定该数据回调函数呢?...既然绑定该数据回调函数不止一个,我们就把所有的回调函数放在一个数组里面,一旦触发该数据setter,就遍历数组触发里面所有的回调函数,我们把这些回调函数称为订阅者。

    2K40

    TypeScript 学习笔记(一)

    前言 TypeScript 是 JavaScript 一个超集,主要提供了 类型系统 和对 ES6 支持,由 Microsoft 开发。...此时针对某一个实例,我们无需了解它是 Cat 还是 Dog,就可以直接调用 eat 方法,程序会自动判断出来应该如何执行 eat 存取器(getter & setter):用以改变属性读取和赋值行为...抽象抽象方法必须在子类中被实现 接口(Interfaces):不同类之间公有的属性方法,可以抽象成一个接口。接口可以被实现(implements)。...,可以在任何地方被访问到,默认所有属性方法都是 public private 私有属性方法,不能在声明它外部访问,也不可以在子类访问 protected 受保护属性方法,它和 private...在函数内部使用变量时候,由于事先不知道它是哪种类型,所以不能随意操作它属性方法 获取一个参数长度: function getLength(arg:T):T { console.log

    2.7K10

    Typescript学习笔记,从入门到精通,持续记录

    当 TypeScript 不确定一个联合类型变量到底是哪个类型时候,我们只能访问此联合类型所有类型里共有的属性方法 function getLength(something: string |...这个特性大大提高了面向对象灵活性。 6. (Generics)是指在定义函数、接口时候,不预先指定具体类型,而在使用时候再指定类型一种特性。...Meow, My name is Tom 3.存取器 使用 gettersetter 可以改变属性赋值和读取行为: class Animal { constructor(name) {...1.实例属性 ES6 实例属性只能通过构造函数 this.xxx 来定义,ES7 提案可以直接在里面定义: class Animal { name = 'Jack'; constructor...public 修饰属性方法是公有的,可以在任何地方被访问到,默认所有属性方法都是 public private 修饰属性方法是私有的,不能在声明它外部访问 protected 修饰属性方法是受保护

    2K50

    Flutter Lesson 2: Dart 语法简单介绍

    重要概念(重要) 在Dart所有的能够使用变量引用都是对象,每一个对象都有一个实例,包括但不限于数字,方法,字符串,null。所有的对象都集成于Object。...这个需要注意,这个和JavaScript变量还是有很大差别的 虽然Dart是强类型语言,但变量类型是可选因为Dart可以自动推断变量类型 Dart支持顶层方法main方法),也支持方法对象方法...,同时你也可以在方法内部创建方法 Dart支持顶层变量,也支持变量对象变量 Dart私有变量用_开头,有点像JS我们自定义函数时候默认_开头为私有变量 Dart变量可以以字母下划线开头...级联操作有点像JQ链式调用,不同点是JQ链式调用需要上一个方法返回这个对象自身,而级联操作是不需要,使用级联操作后,自动返回自身 如果是在web前端,我们要获取一个元素,修改他一些属性...你可以通过实行 gettersetter 来创建新属性, 使用 get 和 set 关键字定义 gettersetter: class Rectangle { num left;

    1.8K20

    typescipt

    直接将其设置为private将导致无法再通过对象修改其中属性 我们可以在定义一组读取、设置属性方法,这种对属性读取设置属性被称为属性存取器 读取属性方法叫做setter方法,设置属性方法叫做...,抽象方法没有方法体只能定义在抽象,继承抽象时抽象方法必须要实现 3、接口(Interface) 接口作用类似于抽象,不同点在于接口中所有方法属性都是没有实值,换句话说接口中所有方法都是抽象方法...接口主要负责定义一个结构,接口可以去限制一个对象接口,对象只有包含接口中定义所有属性方法时才能匹配接口。同时,可以让一个去实现接口,实现接口时要保护接口中所有属性。...(Generic) 定义一个函数时,有些情况下无法确定其中要使用具体类型(返回值、参数、属性类型不能确定),此时便能够发挥作用。...hello"); 使用时,完全可以将当成是一个普通去使用 同样可以使用: class MyClass{ prop: T; constructor(prop: T

    72310

    【Vue 响应式数据原理】数据双向绑定原理

    数据劫持: 通过 Object.defineProperty(obj, key, value)方法给对象每一个属性都加上一个 gettersetter(监听是每一个属性)。...订阅者-发布者: 当我们修改某个属性值时,底层调用了 setter修改数据,当数据发生变化会被vue实例监听到,从而调用相应getter方法获取新数据,实现数据双向绑定。...1.2 数组数据响应式原理 vue 对JavaScript数组方法进行了二次封装(重写)来劫持这些方法,在原有操作数据基础上,添加了将数据响应到页面的功能。...Vue 3 响应式原理 2.1 vue 2 缺陷 vue 2 通过设定对象属性getter/setter方法来监听数据变化,同时getter也用于依赖收集,而setter在数据变更时通知订阅者更新视图...只需做一层代理就可以监听同级结构下所有属性变化,包括新增属性和删除属性 Proxy也可以监听数组变化。

    42020
    领券