首页
学习
活动
专区
圈层
工具
发布

盘点JavaScript中getter()和setter()函数的使用

它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 二、Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。...四、更聪明的 getter/setter Getter/setter 可以用作“真实”属性值的包装器,以便对它们进行更多的控制。...例: 如果想禁止太短的 user的 name,可以创建一个 setter name,并将值存储在一个单独的属性 _name中: let user = { get name() { return...但是,这儿有一个众所周知的约定,即以下划线 "开头的属性是内部属性,不应该从对象外部进行访问。...五、兼容性 访问器的一大用途是,它们允许随时通过使用 getter 和 setter 替换“正常的”数据属性,来控制和调整这些属性的行为。

2.5K11

C# 使用反射获取私有属性的方法

private string F { set; get; } = "123"; } 如果需要拿到 Foo 的 属性 F 可以通过 PropertyInfo 直接拿到,从一个类拿到对应的...这里的两个 Get 不是写错了,而是拿到 Get 方法的意思,也就是需要属性有 get 方法才可以使用下面代码 MethodInfo getter = property.GetGetMethod(nonPublic...: true); var f = getter.Invoke(foo, null); 通过 GetGetMethod 可以拿到 MethodInfo 方法,如果对属性的返回值是可见的,如上面的 Foo...,而缓存也只是缓存 PropertyInfo 的值,于是在下面测试 GetGetMethod 的方法,这个方法在跑100次就添加了缓存 public void GetPropertyGetAccessorMethodInfo_Call100...GetGetMethod 带缓存的性能是 GetValue 的一倍,也就是找到 PropertyInfo 占用的时间如果能减少,就可以提高速度。

2.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C#中的反射解析及使用.

    MethodInfo      该类保存给定的方法信息  MemberInfo     该类是一个基类,它定义了EventInfo、FieldInfo、MethodInfo、PropertyInfo...能查找到类里面的方法 1 Type type=typeof(Example); 2 MethodInfo[] listMethodInfo=type.GetMethods(); 3 foreach(MethodInfo...按如下的顺序来定位程序集:     ⑴如果程序集有强名称,在首先在全局程序集缓(GAC)中查找程序集。    ...⑵如果程序集的强名称没有正确指定或GAC中找不到,那么通过配置文件中的元素指定的URL来查找     ⑶如果没有指定强名称或是在GAC中找不到,CLR会探测特定的文件夹:     假设你的应用程序目录是...3,Assembly.LoadFile()     这个方法是从指定的文件来加载程序集,和上面方法的不同之处是这个方法不会加载此程序集引用的其他程序集!

    2.6K140

    C# 使用反射获取私有属性的方法 测试

    private string F { set; get; } = "123"; } 如果需要拿到 Foo 的 属性 F 可以通过 PropertyInfo 直接拿到,从一个类拿到对应的...这里的两个 Get 不是写错了,而是拿到 Get 方法的意思,也就是需要属性有 get 方法才可以使用下面代码 MethodInfo getter = property.GetGetMethod(nonPublic...: true); var f = getter.Invoke(foo, null); 通过 GetGetMethod 可以拿到 MethodInfo 方法,如果对属性的返回值是可见的,如上面的 Foo...,而缓存也只是缓存 PropertyInfo 的值,于是在下面测试 GetGetMethod 的方法,这个方法在跑100次就添加了缓存 public void GetPropertyGetAccessorMethodInfo_Call100...GetGetMethod 带缓存的性能是 GetValue 的一倍,也就是找到 PropertyInfo 占用的时间如果能减少,就可以提高速度。

    2.9K20

    寻找性能更优秀的不可变小字典

    Dictionary 是一个很常用的键值对管理数据结构。但是在性能要求严苛的情况下,字典的查找速度并不高。所以,我们需要更快的方案。...需求说明 这里,我们需要一个 PropertyInfo 和委托对应的映射关系,这样我们就可以存储《寻找性能更优秀的动态 Getter 和 Setter 方案》提到的委托。...知识要点 使用表达式创建委托 PropertyInfo 有一个 int MetadataToken 属性,根据目前的观察,可以知道在一个类型中的属性其 MetadataToken 似乎是连续的,因此可以取模后作为跳表的...所谓的跳表,可以简单理解为,使用数组的下标来定位数组中的特定元素。 实现代码 这里,我们直接给出基准测试中使用的代码。...0.1.4 发布,初始版本 使用样例 Newbe.ObjectVisitor 样例 1 番外分享 寻找性能更优秀的动态 Getter 和 Setter 方案 寻找性能更优秀的不可变小字典 GitHub

    55500

    寻找性能更优秀的动态 Getter 和 Setter 方案

    方案说明 就是用表达式编译一个 Action 作为 Setter,编译一个 Func 作为 Getter。...然后把这些编译好的委托放在一个泛型类的静态字段中保存起来,需要使用的时候从这里面查找就可以了。...知识要点 使用表达式创建委托 泛型类的静态字段是每个闭合类型独立的,因此用于存储和类型相关的内容非常方便 实现代码 由于代码中混合的使用 Switch 作为字典的阴招,所以代码很长,此处不再罗列,仅给出链接...如果属性是明确的,建议把字典中取出来的委托保存在自己的上下文,这可以明显的省去查找的消耗。 图表 从左往右分别是:直接读取属性、缓存委托、不缓存委托和使用 PropertyInfo。...0.1.4 发布,初始版本 使用样例 Newbe.ObjectVisitor 样例 1 番外分享 寻找性能更优秀的动态 Getter 和 Setter 方案 寻找性能更优秀的不可变小字典 GitHub

    86100

    C#反射与特性(八):反射操作的示例大全

    前面我们使用 MemberInfo 来获取类型的成员并进行操作,也使用了 PropertyInfo 、MethodInfo 等,我们使用到的成员,都是公开成员。...InvokeMember 中的参数比较复杂,我们一般只使用第一个重载方法,第二个重载方法无非多了个 CultureInfo,用来处理语言文化差别,本篇中关于 InvokeMember 的使用,全是指第一个重载方法...例如私有成员用 BindingFlags.NonPublic 、静态成员用BindingFlags.Static ,通过枚举集合来筛选,可以查找到需要使用的成员。...1.2 实践使用 InvokeMember 和成员的重载方法 本节介绍 InvokeMember 的用法以及 MethodInfo 、PropertyInfo 等使用 BindingFlags 的重载方法...,并且是在当前类型中定义的成员(排查继承的成员,例如 ToString() 方法等),并且返回了实例。

    1.8K61

    C#反射与特性(五):类型成员操作

    :一个类型中使用了父类或者自己的方法,那么返回此方法的出处; ReflectedType :从哪个类型中获取,就返回哪个类型;即从个 Type 里获得成员实例,就返回这个 Type 的名称; 新建一个两个类型...ToString() 进行重写,所以返回的是 Object; 2,从 IL 看反射 笔者的 IL 知识非常薄弱,只能列出一些简单的内容。...PropertyInfo 中有个 GetAccessors() 方法,可以获取相应的信息。...2.2 属性的方法 从反射和 IL 我们得知,一个属性会自动生成两个方法。 那么我们通过 PropertyInfo 可以获取到这些方法。...我们在写代码时,会使用到例如 Visual Studio 等 IDE,如果使用 nameof,里面的类型是强类型的,可以查找引用、跳转、获取注释等。如果需要重构,也可以快速重命名所有引用。

    1.4K40

    C#进阶学习--反射(Reflection)

    一.反射的定义 审查元数据并收集关于它的类型信息的能力。 二.基础概念 (1)Assembly:定义和加载程序集,加载在程序集中的所有模块以及从此程序集中查找类型并创建该类型的实例。...(2)Module:获取包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。...(8)ParameterInfo:获取参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。...,我们可以看到,调用有重载和无重载方法的关键,就是在GetMethod中是否传递参数的类型。...4).如果调用的是泛型类中的普通方法,无需设置泛型方法的参数类型,反之,如果调用的是普通类中的泛型方法,无需设置泛型类参数个数,也无需设置参数类型 至此,反射的常用方式讲解完毕...

    1.8K20

    Ooder A2UI 第一性原理出发 深度解析核心逻辑

    方法可能对应某个字段的Getter/Setter 字段的注解可以补充方法的元数据 支持字段和方法的协同工作 为什么需要处理数组和集合类型?...支持标准的Getter/Setter 支持Boolean的isXxx模式 支持驼峰命名转换 4. 索引层确定性 索引属性是A2UI确定性的第四层保障,通过索引保证字段顺序的确定性。...字段未定义时 字段为默认字段时 方法有自定义注解时 原则2:Getter/Setter识别原则 Getter/Setter识别原则是指通过方法名识别Getter和Setter方法。...getXxx:标准Getter setXxx:标准Setter isXxx:Boolean Getter 原则3:注解优先级原则 注解优先级原则是指不同注解之间有明确的优先级顺序。...不依赖实现 单一职责原则 一个类一个职责 专注的功能 易于测试 A2UI通过这些机制和原则,实现了从Java类到UI组件的自动化转换,为Ooder框架提供了强大的"配置即代码"能力。

    15100

    调用内部或私有方法的N种方法

    非公开的类型或者方法被“隐藏”在程序集内部,本就不希望从外部访问,但是有时候调用一个内部或者私有方法可能是唯一的“救命稻草”,这篇文章列出了几种具体的实现方式。...以如下这个Foobar类型为例,它具有一个内部属性InternalValue,我们来看看有多少种方式可以从外部获取一个Foobar对象的InternalValue属性值。...InternalValueAccessor类型的GetInternalValue方法中。...在如下的代码中,我们创建了一个DynamicMethod类型表示的动态方法,以IL Emit的方式利用IL指令Call完成了针对InternalValue属性的Get方法的调用。...如果使用Calli指令,在完成针对参数的压栈之后,我们还需要执行Ldftn指令将方法指针压入栈中,最终执行Calli指令完成方法的执行。

    76920

    win10 uwp 反射

    反射可以在程序运行得到这几个组成部分的相关信息。 反射可以获得Assembly,他可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。...可以获得Type,他可以获得对象的类型信息,包括属性方法,可以调用属性方法。可以获得MethodInfo,他可以得到类方法的参数、返回值,可以调用方法。...可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射 反射主要应用与类库...-- Name="*Application*" 的程序集元素将应用到应用程序包中的所有程序集。星号不是通配符。...Name"); //获取Name属性对象 var name = propertyInfo.GetValue(obj,null); //获取Name属性的值 propertyInfo.SetValue

    1.5K20

    C#反射机制

    (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。...但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息。...(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息 GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息可以调用这些成员...,其方式是调用Type的InvokeMember()方法,或者调用MethodInfo, PropertyInfo和其他类的Invoke()方法。...介绍 Assembly类可以获得程序集的信息,也可以动态的加载程序集, 以及在程序集中查找类型信息,并创建该类型的实例。

    66630
    领券