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

构造函数中的getter/setter

构造函数中的getter/setter是指在构造函数中定义的用于获取(get)和设置(set)对象属性值的方法。这种方法在面向对象编程中非常常见,可以帮助我们更好地控制对象的属性值,并确保对象的状态始终是有效的。

在JavaScript中,构造函数中的getter/setter可以使用Object.defineProperty()方法来定义。例如:

代码语言:javascript
复制
function Person(name, age) {
  this._name = name;
  this._age = age;
}

Object.defineProperty(Person.prototype, 'name', {
  get: function() {
    return this._name;
  },
  set: function(value) {
    if (typeof value === 'string') {
      this._name = value;
    } else {
      throw new Error('Name must be a string');
    }
  }
});

Object.defineProperty(Person.prototype, 'age', {
  get: function() {
    return this._age;
  },
  set: function(value) {
    if (typeof value === 'number' && value > 0) {
      this._age = value;
    } else {
      throw new Error('Age must be a positive number');
    }
  }
});

在上面的例子中,我们使用Object.defineProperty()方法为Person对象的nameage属性定义了getter和setter方法。这样,我们就可以在构造函数中设置这些属性的值,并在需要时获取它们的值。

在Python中,构造函数中的getter/setter可以使用@property@<attribute>.setter装饰器来定义。例如:

代码语言:python
代码运行次数:0
复制
class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        if isinstance(value, str):
            self._name = value
        else:
            raise ValueError('Name must be a string')

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if isinstance(value, int) and value > 0:
            self._age = value
        else:
            raise ValueError('Age must be a positive integer')

在上面的例子中,我们使用@property@<attribute>.setter装饰器为Person类的nameage属性定义了getter和setter方法。这样,我们就可以在构造函数中设置这些属性的值,并在需要时获取它们的值。

总之,构造函数中的getter/setter是一种非常有用的编程技巧,可以帮助我们更好地控制对象的属性值,并确保对象的状态始终是有效的。

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

相关·内容

盘点JavaScriptgetter()和setter()函数使用

它们本质上是用于获取和设置值函数,但从外部代码来看就像常规属性。 二、Gettersetter 访问器属性由 “getter” 和 “setter” 方法表示。...这就是访问器属性设计思想。不以函数方式 调用 user.fullName,正常 读取 它:getter 在幕后运行。 截至目前,fullName只有一个 getter。...四、更聪明 getter/setter Getter/setter 可以用作“真实”属性值包装器,以便对它们进行更多控制。...例: 如果想禁止太短 user name,可以创建一个 setter name,并将值存储在一个单独属性 _name: let user = { get name() { return...六、总结 本文基于JavaScript基础,介绍了gettersetter函数使用。对于其中属性,通过案例样式,运行效果图展示,进行详细讲解。

1.6K11
  • Vue引发gettersetter

    这就要用到gettersetter了。...isMe.name) isMe.name = '周神' console.log(isMe.name) console.log(isMe) 输出: 你会发现这个对象和最上面的Vue...接下来创建一个码农实例,isMe;此时,isMe是没有name属性,当我们调用isMe.name时,我们会进入到get name(){...},先判断isMe是否有name属性,答案是否定,那麽就添加一个...看到这里你一定知道get怎么使用了,对,你可以把get看成一个取值函数函数返回值就是它拿到值。...;形参val就是我赋给name属性值,在这个函数里,我就可以做很多事了,比如双向绑定!因为这个值每次改变都必须经过set,其他方式是改变不了它,相当于一个万能监听器。

    1.5K70

    kotlin数据类重写setter getter正确方法

    data class User(val name: String, val age: Int) 编译器会根据主构造声明全部属性, 自动推断产生以下成员函数: equals()/hashCode()...函数对, toString() 函数, 输出格式为 “User(name=John, age=42)” , componentN() 函数群, 这些函数与类属性对应, 函数数字 1 到 N, 与属性声明顺序一致..., copy() 函数 如果在该数据类或者基类重写了以上某个成员函数,将不会再自动推断,以重写为准。...前言 kotlin数据类,由于其内部封装了gettersetter方法,极大地简化了我们编程代码,但同时其不能像java那样方便重写getter或者setter方法,也给大家造成了一定麻烦。...这种格式,或者yyyy年MM月dd日这种,再或者更加友好一点,根据时间段,转成1小时前、2天前、一周前这种,在实际开发中都是常有的情况,在Java我们可以很方便getter方法做这些处理,但是kotlin

    4K10

    js对象属性gettersetter

    ES5gettersetter方法,通过 Object.defineProperty 把实例属性全部转为 getter/setter。...故温故一遍gettersetter定义属性方法。 通过对象字面量定义get和set方法 有个注意地方,get与set函数体都不能再定义本身该属性,否则执行时候会陷入死循环,抛出栈溢出。...在对象字面量,同一个属性不能有两个get,也不能既有get又有属性键值(不允许使用 { get x() { }, get x() { } } 和 { x: …, get x() { } } ) 在同一个对象...但是如果定义了set或者get方法任何一个,就不能再设置writable,即便false也不可以 var o = { a:0 } Object.defineProperty(o, "b", { get...: function () { return this.a + 1; } }); console.log(o.b) // Runs the getter, which yields a + 1 (which

    3.2K50

    iOSsetter方法 、getter方法、点语法、@property

    属性概念 属性是OC一项特性,用于封装对象数据 OC对象通常会把其所需要数据保存为各种属性 属性通过存取方法来访问(settergetter) 例如:在Person类定义了2个属性 通过...点语法在等号左边,那么编译器会自动转换为setter方法,点语法在等号右边或没有等号,那么编译器会自动转化为getter方法 Person *per = [[Person alloc]init];...nonatomic,因为iOS中使用同步锁开销比较大,会影响性能 读写权限 readwrite:属性拥有gettersetter方法 readonly: 属性拥有getter方法 内存管理关键字...,所有要拷贝一份不可变字符串,确保对象字符串值不会无意间变动) 方法名 getter=:指定获取方法方法名, @property (nonatomic,getter=isOn) BOOL...on; setter=:指定设置方法方法名,这种用发不常见,此处不做太多解释

    25710

    TW洞见〡gettersetter那些事

    但是,当你写了很多程序,写过很多gettersetter,尤其是有些类方法,只有gettersetter时,总会有一天,你会疑惑,我到底为什么要这么干? Why private field?...这时,数据,和作用在数据上函数,是分开两部分,尽管两者之前保持着千丝万缕关系。而一个函数,能够作用在哪些数据上,仅仅通过类型来限制,很难满足真实业务需求。...比如,一个代表年龄数值型变量,可能会被错误传递给处理温度(也是数值型)函数,得到一个负值作为返回值。 既然数据和函数是相关联,何不将两者放在一起呢?...Why getter & setter, again? 然而,却并不是所有语言都是这样。比如和Java最像C#,虽然也建议将字段设置为private,但是却可以不用gettersetter。...因为在C#和Python,property访问方式和直接将数据字段暴露出来访问方式完全一样,所以在写代码时可以考虑先将数据暴露出来,避免过多gettersetter,减少冗余代码。

    87760

    【Groovy】Groovy 方法调用 ( Java 类成员及 settergetter 方法设置 | Groovy 类自动生成成员 gettersetter 方法 )

    文章目录 一、Java 类成员及 settergetter 方法设置 二、Groovy 类自动生成成员 gettersetter 方法 一、Java 类成员及 settergetter...方法设置 ---- 创建标准 Java 类 , 需要将成员变量设置为私有成员 , 并且为其定义 gettersetter 方法 ; class Student { private String...gettersetter 方法 ---- 在 Groovy 脚本创建 Groovy 类 , 在其中定义 2 个成员 ; /** * 创建 Groovy 类 * 在其中定义 2 个成员 */...class Student { def name def age } 在 Groovy , 不需要定义成员变量 settergetter 方法 , Groovy 会自动生成相关...字节码文件 , 可以看到系统为 Student 类自动生成了 gettersetter 方法 ; 完整字节码类如下 : // // Source code recreated from

    1.1K30

    寻找性能更优秀动态 GetterSetter 方案

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

    49700

    js 构造函数构造函数作用,构造函数和普通函数区别

    构造函数 在 JavaScript ,用 new 关键字来调用函数,称为构造函数构造函数首字母一般大写(规范)。...并且该对象继承函数原型; 属性和方法被加入到this引用对象; 隐式返回this对象(如果没有显性返回其他对象) 简单说 用new调用构造函数,最大特点为,this对象指向构造函数生成对象...(ES6 class 与构造函数关 系,通过class定义类 和通过构造函数定义类 二者本质相同。并且在js执行时,会将第一种转会为第二种执行。...所以 ES6 class写法实质就是构造函数) 4、内部用this 来构造属性和方法 5、构造函数执行流程 A、立刻在堆内存创建一个新对象 B、将新建对象设置为函数this C、...逐个执行函数代码 D、将新建对象作为返回值 6、构造函数返回值默认是this 也有其他情况 。

    3.4K10

    java里gettersetter作用和区别是什么?

    ,于是gettersetter就使用上了。...增加两个方法保证了类结构完整性以及安全性还是非常合算做法,其实从框架上考虑增加这两个方法还能在实际编程过程增加额外功能作用,现在就根据实际编程经验做一些总结归纳: 1.可以通过setter方法检查下数据准确性...,比如是否越界之类异常等等 2.可以在setter方法里面加上一些功能函数,主要在限定一些条件如果数值达到一定范围之后就开始做某些动作,选择时机点正好在这个方法里面。...3.加入涉及到多线程操作,在setter方法里面正好做加锁操作,正好是一个恰当时机 4.由于是关键数值变化,在这两个方法中加上打印非常适合追踪数据变化,方便程序判断。...以上四点是在项目推进过程总结,希望对于初学java有所帮助。

    1.7K30

    【Kotlin】类初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 gettersetter 方法 | 手动设置成员 gettersetter 方法 | 计算属性 )

    文章目录 一、Kotlin 自动为成员字段生成 gettersetter 方法 二、手动设置成员 gettersetter 方法 三、计算属性 一、Kotlin 自动为成员字段生成 getter...和 setter 方法 ---- 定义 Kotlin 类 , 在 类 定义成员属性 , 会自动生成 gettersetter 方法 ; 在 Kotlin 定义如下类 , 在其中定义两个字段...Java 代码 , 存在 name 和 age 成员 gettersetter 函数 ; 调用 hello.name 方法 , 实际上调用是 hello.setName 方法 ; class...结果 如下 : 二、手动设置成员 gettersetter 方法 ---- Kotlin 会为 类每个 成员属性 生成一个 field , getter , setter ; field...用于存储 属性数据 , 是由 Kotlin 自动进行定义封装 , 只有在 gettersetter 函数才能调用 field ; 手动定义 gettersetter 方法示例 : class

    1.8K20
    领券