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

在构造函数中记录this的值是否安全

在构造函数中记录 this 的值并不安全。在构造函数中访问 this 的值可能会导致问题,因为 this 的值是在运行时确定的,而不是在编译时确定的。这可能会导致意外的行为和错误。

如果您需要在构造函数中记录某个对象的属性或方法,建议使用静态属性和方法,而不是使用 this 关键字。这样可以确保您的代码在编译时是正确的,并且可以避免潜在的问题。

以下是一个示例,演示如何在构造函数中使用 this 关键字:

代码语言:javascript
复制
class MyClass {
  constructor() {
    this.myProperty = "Hello World";
    this.myMethod();
  }

  myMethod() {
    console.log(this.myProperty);
  }
}

const myInstance = new MyClass();
myInstance.myMethod(); // 输出 "Hello World"
console.log(myInstance.myProperty); // 输出 "undefined"

在上面的示例中,我们在构造函数中记录了 myProperty 属性,但是我们在 myMethod 中使用 this.myProperty 访问它。这会在运行时引发错误,因为 this 的值是在运行时确定的,而不是在编译时确定的。

相反,您可以使用静态属性和方法来记录您的对象的属性,如下所示:

代码语言:javascript
复制
class MyClass {
  static myProperty = "Hello World";

  static myMethod() {
    console.log(MyClass.myProperty);
  }
}

MyClass.myMethod(); // 输出 "Hello World"
console.log(MyClass.myProperty); // 输出 "Hello World"

在上面的示例中,我们使用静态属性和方法来记录 myProperty 属性,并在 myMethod 中使用它。这可以确保代码在编译时是正确的,并且可以避免潜在的问题。

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

相关·内容

是否能在构造函数,析构函数抛出异常?

目的是给客户一个处理错误机会。      3. 如果析构函数异常非抛不可,那就用try catch来将异常吞下,但这样方法并不好,我们提倡有错早些报出来。 二.  ...构造函数抛出异常,会导致析构函数不能被调用,但对象本身已申请到内存资源会被系统释放(已申请到资源内部成员变量会被系统依次逆序调用其析构函数)。      2....因为析构函数不能被调用,所以可能会造成内存泄露或系统资源未被释放。      3. 构造函数可以抛出异常,但必须保证构造函数抛出异常之前,把系统资源释放掉,防止内存泄露。(如何保证???...构造函数尽量不要抛出异常,能避免就避免,如果必须,要考虑不要内存泄露! 2. 不要在析构函数抛出异常! 本文参考: 1. 《Effective C++》条款08:别让异常逃离析构函数。 2. ...C++构造函数抛出异常 http://blog.csdn.net/deyili/article/details/6332760 3. C++ 构造函数抛出异常会引起内存泄漏吗?

3.6K50

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

构造函数 JavaScript ,用 new 关键字来调用函数,称为构造函数构造函数首字母一般大写(规范)。...4、构造函数返回 构造函数执行过程最后一步是默认返回 this 。言外之意,构造函数返回还有其它情况。 没有手动添加返回,默认返回 this。...(ES6 class 与构造函数关 系,通过class定义类 和通过构造函数定义类 二者本质相同。并且js执行时,会将第一种转会为第二种执行。...所以 ES6 class写法实质就是构造函数) 4、内部用this 来构造属性和方法 5、构造函数执行流程 A、立刻在堆内存创建一个新对象 B、将新建对象设置为函数this C、...逐个执行函数代码 D、将新建对象作为返回 6、构造函数返回默认是this 也有其他情况 。

3.4K10
  • java构造函数调用另一个构造函数_java构造函数

    参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法是专门用来创建对象方法,当我们通过关键字new来创建对象时,其实就是调用构造方法  * 格式:... * public 类名称(参数类型 参数名称){  *         方法体  *   * }  * 注意事项:  * 1.构造方法名称必须和所在类名称完全一样,就连大小写也要一样  * 2.构造方法不要写返回类型...,连void都不写  * 3.构造方法不能return一个具体返回  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载。  ...;     }     //有参数构造方法     public Student(String name,int age) {         System.out.println("全参构造方法执行啦

    4.5K60

    构造函数没有返回是怎么赋值

    众所周知,java里是不能给构造函数写返回,如果在低版本编译器定义一个构造器写上返回可能会报错,高版本里面他就是一个普通方法。...可是如果构造函数没有返回,那么比如Test t = new Test()我们new一个对象时候是怎么赋值呢?...4: invokespecial #7 // Method "init":()V,调用构造函数,V代表void无返回,那么init代表什么含义?...我书里找到这样一段话: Java 虚拟机层面上,Java 语言中构造函数是以一个名为init特殊实例初始化方法形式出现,init这个方法名称是由编译器命名,因为它并非一个合法 Java...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值呢?

    1.7K20

    构造函数以及析构函数PHP需要注意地方

    构造函数以及析构函数PHP需要注意地方 基本上所有的编程语言类中都会有构造函数和析构函数概念。...构造函数函数实例创建时可以用来做一些初始化工作,而析构函数则可以实例销毁前做一些清理工作。...,则默认调用父类 析构函数如果没显式地将变量置为NULL或者使用unset()的话,会在脚本执行完成后进行调用,调用顺序测试代码是类似于栈形式先进后出(C->B->A,C先被析构),但在服务器环境则不一定...引用如果没有释放,析构函数是不会执行构造函数低版本兼容问题 PHP5以前,PHP构造函数是与类名同名一个方法。...构造函数和析构函数访问限制 构造函数和析构函数默认都是public,和类其他方法默认一样。当然它们也可以设置成private和protected。

    1.6K20

    【Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数定义成员属性 | 次构造函数 | 构造函数默认参数 )

    文章目录 一、主构造函数定义临时变量 二、主构造函数定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- Kotlin 类 , 可以 类声明 时 类名后...定义 " 主构造函数 " ; 构造函数 , 可以 定义 成员属性 , 并为 成员属性 提供 初始 ; 构造函数 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称...---- 构造函数 定义临时变量 , 格式为 : class 类名(_临时变量名: 临时变量类型){} 构造函数也可以 定义成员属性 , 格式为 : class 类名(var 成员属性名:..., 每个次构造函数都可以有不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例...---- 定义 构造函数 时 , 可以为 构造函数 参数 指定 默认 , 如果 用户传入了 值参 则 使用用户传入 , 如果用户没有传入 则 使用该 默认 ; 如果 构造函数 参数有 指定默认

    4.8K20

    【学习笔记】SWIFT构造函数

    SWIFT 简洁强大而又人性化,不过最近忙于照顾二崽,学习进度有点慢,也没有任何实操,总感觉很虚,暂时学习到 SWIFT 构造函数,比起 Java 来说内容要丰富得多,做一个学习笔记,记录要点,掌握精髓...myVariable = "abc" } } let instance = MyClass() 你可以不要定义构造函数,比如变量都已经有默认没有必要自定义构造函数,那么我们可以使用默认构造函数...,仅此一个,注意:这个构造函数还是个可失败构造函数,学过 Java 朋友都知道,构造函数可以抛出异常, Swift 可以直接让实例化失败返回 nil ,那就是: Failable Initializer...Override 和 Required 关键字 SWIFT 构造函数子类同样定义的话,必须需要 override 关键字: class ParentClass { init() {...override 关键字,但是所有用 required 构造函数子类必须全部继承。

    1.2K20

    构造函数没有返回是怎么赋值

    个人原创100W+访问量博客:点击前往,查看更多 转自:艾小仙 众所周知,java里是不能给构造函数写返回,如果在低版本编译器定义一个构造器写上返回可能会报错,高版本里面他就是一个普通方法。...可是如果构造函数没有返回,那么比如Test t = new Test()我们new一个对象时候是怎么赋值呢?...4: invokespecial #7 // Method "init":()V,调用构造函数,V代表void无返回,那么init代表什么含义?...我书里找到这样一段话: Java 虚拟机层面上,Java 语言中构造函数是以一个名为init特殊实例初始化方法形式出现,init这个方法名称是由编译器命名,因为它并非一个合法 Java...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值呢?

    1.7K20

    箭头函数this

    其实那只是其中一个因素,还有一个因素就是ZnHobbies方法this已经不属于上一个区块,而这里this并没有name。...所以 解决办法其中一个就是ZnHobbies函数写入 var that = this; 然后将this替换成that,所以输出结果,就有了lucifer名字啦。...还有的一个办法就是将ZnHobbies函数map改写成箭头函数: ZnHobbies: function () { this.hobbies.map((hobby)=...为什么箭头函数可以达到这样效果呢?是因为箭头函数没有它自己'this'。它this是继承于它父作用域。...所以它不会随着调用方法改变而改变,所以这里this就指向它父级作用域,而上一个this指向是Lucifer这个Object。所以我们就能准确得到Lucifername啦。

    2.2K20

    MySQL|update字段为相同是否记录binlog

    一 前言 前几天一个开发同事咨询我,update 更新字段为相同是否记录binlog,我回复说不会。 其实 严格说这个答案是不准确,说要区分场景。...是否记录 update 语句到binlog依赖于 binlog_format 设置。具体情况 实践出真知。 二 测试 2.1 binlog_format 为 ROW 模式 ?...解析binlog内容,完整记录了update语句。 ? 2.2 binlog_format 为 MIXED 模式 ?...当 row_format 为mixed或者statement格式是,binlog 大小发生改变,不管是否真的更新数据,MySQL都记录执行sql 到binlog。...三 小结 基于row模式时,server层匹配到要更新记录,发现新和旧一致,不做更新,就直接返回,也不记录binlog。

    6.3K20

    【Groovy】循环控制 ( Java 语法循环 | 默认 IntRange 构造函数 | 可设置翻转属性 IntRange 构造函数 | 可设置是否包含 to 构造函数 | 0..9 简写 )

    文章目录 一、使用 Java 语法循环 二、使用 IntRange 循环 1、使用默认 IntRange 构造函数 2、使用可设置翻转属性 IntRange 构造函数 3、使用可设置是否包含 to... IntRange 构造函数 三、使用 0..9 简化方式 IntRange 实例对象 四、完整代码示例 一、使用 Java 语法循环 ---- Groovy , 使用 Java 语法进行循环...IntRange 构造函数 使用默认 IntRange 实例对象控制循环 ; 构造函数 : /** * 创建一个新非包容性IntRange。...* * @param from 范围第一个数字开始。 * @param to 范围内最后一个数字。...to IntRange 构造函数 构造函数 : /** * Creates a new inclusive aware IntRange

    1.2K30

    Java构造函数没有返回,是怎么赋值

    众所周知,java里是不能给构造函数写返回,如果在低版本编译器定义一个构造器写上返回可能会报错,高版本里面他就是一个普通方法。...可是如果构造函数没有返回,那么比如Test t = new Test()我们new一个对象时候是怎么赋值呢?...4: invokespecial #7 // Method "init":()V,调用构造函数,V代表void无返回,那么init代表什么含义?...我书里找到这样一段话: Java 虚拟机层面上,Java 语言中构造函数是以一个名为init特殊实例初始化方法形式出现,init这个方法名称是由编译器命名,因为它并非一个合法 Java...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值呢?

    2.1K00

    解析C#类构造函数

    “这些字段总是有一个印象,如果基类构造器调用了一个虚方法,它回调派生类定义一个方法,就可能出现问题。...3.构造函数使用范围:     (1).无参数实例构造函数与静态构造函数可以同一类同时定义,有参实例构造函数与静态构造函数也可以同一类同时定义。...C#类替代构造函数方式: 1.极少数情况下,可以不调用实例构造前提下创建一个类型实例。...2.构造函数调用: C#类构造器可以调用其他构造器。C#构造函数初始化器可以包含对同一类另一个构造函数调用,也可以包含对直接基类构造函数调用。初始化器不能有多个调用。...类型构造调用: JIT编译器必须决定是否生成代码来调用它,而CLR必须确保对它调用是线程安全。 2.

    3.2K50
    领券