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

构造函数中的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是一种非常有用的编程技巧,可以帮助我们更好地控制对象的属性值,并确保对象的状态始终是有效的。

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

相关·内容

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

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

2.1K11
  • Vue引发的getter和setter

    这就要用到getter和setter了。...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.7K70

    iOS中setter方法 、getter方法、点语法、@property

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

    45510

    js对象属性的getter和setter

    ES5的getter和setter方法,通过 Object.defineProperty 把实例属性全部转为 getter/setter。...故温故一遍getter和setter定义属性的方法。 通过对象字面量定义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.9K50

    TW洞见〡getter和setter的那些事

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

    1.1K60

    【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )

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

    1.7K30

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

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

    69100

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

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

    4.7K10

    java里getter和setter的作用和区别是什么?

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

    2.1K30

    Dart 中的命名构造函数和常量构造函数

    命名构造函数 在 Dart 中,和 Java、C++、C# 等语言不同,我们不能通过重载构造函数(即使用相同的构造函数名来创建不同的构造函数)来创建多个构造函数。...1.3 命名构造函数与默认构造函数的组合 你可以在一个类中同时使用默认构造函数和命名构造函数。默认构造函数通常用来进行基本的初始化,而命名构造函数可以用于处理更特殊的初始化场景。...1.5 总结 命名构造函数是 Dart 中处理多个构造函数的一种方法。它们允许你为类创建多个不同的构造函数,提供灵活的对象创建方式,增强代码的可读性和可维护性。...常量构造函数(const 构造函数) 在 Dart 中,常量构造函数(const 构造函数)允许你创建编译时常量的对象。这些对象在编译时就被完全初始化,且在程序运行期间是不可变的。...常量对象通常用于提高程序的性能和减少内存占用,因为常量对象只会在内存中创建一次并被重用。 常量构造函数是通过在构造函数前加上 const 关键字来定义的。

    1.1K20

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

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

    3K20
    领券