博客
关于我
ES6——类的基本语法
阅读量:528 次
发布时间:2019-03-08

本文共 2468 字,大约阅读时间需要 8 分钟。

JavaScript 类 与 严格模式

作为 JavaScript 开发者,我们在编写代码时会经常接触到类(class)的概念以及严格模式(strict mode)的相关知识。本文将详细介绍这两个核心概念,并探讨它们对代码编写和执行的影响。


类(class)的基本概念

类是 JavaScript 中用于创建对象的模板,它通过 class 关键字定义。类似于其他编程语言中的类,类可以包含属性和方法,用以描述对象的特性和行为。以下是一个基本的例子:

class Point {  constructor(name, val) {    this.name = name;    this.age = "18";    this.val = val;    this.setData(val);  }  eat() {    console.log(`我叫${this.name}`);  }}var t = new Point("李现", "诸葛大力");console.log(t.name); // 输出:李现t.eat(); // 输出:我叫李现

在这个例子中,Point 类定义了一个对象的模板。每当我们使用 new Point 命名时,就会创建一个新的对象实例 t。通过 constructor 方法,我们定义了实例的属性和初始值。


设置和保存数据的两种写法

在 JavaScript 中,我们可以通过两种方式设置和保存数据:直接赋值和使用getter/setter 方法。以下是具体示例:

class Point {  constructor(name, val) {    this.name = name;    this.age = "18";    this.val = val;  }  eat() {    console.log(`我叫${this.name}`);  }  // 写法一:使用 getter 和 setter  get prop() {    console.log(`我的值是${value}`);  }  prop1 = "哈哈";  // 写法二:自定义数据处理方法  setData(value) {    this.val = value;    console.log(this.val);  }  getData() {    return this.val;  }}var t = new Point("李现", "诸葛大力");t.prop = 1234; // 输出:1234t.setData("我是新来的"); // 输出:我是新来的console.log(t.getData()); // 输出:我是新来的

这种写法使得对象的属性更加可读和维护友好。


属性表达式

属性表达式是 JavaScript 中一种简洁的方式来为对象定义可读且 обратисим的属性。与传统的 gettersetter不同,属性表达式可以直接在类定义时定义。

class Person {  constructor(sex) {    this.sex = sex;    this.hobby = "女";  }  shopping() {    console.log("天生会逛街");  }}let p = new Person();p.shopping(); // 输出:天生会逛街// 属性表达式改写:const shopping = "shop";[shopping] = class Person {  shopping() {    console.log("一个省钱的春节");  }}();let person = new Person();person.shop(); // 输出:一个省钱的春节

这种写法可以显著简化代码,同时保持可读性。


类表达式(class expressions)

类表达式是类的另一种定义方式,它允许类在表达式中使用。这在某些情况下非常有用,例如模块内的类定义。

const MyClass = class Me {  // 在 class Me 中,可以使用 Me 作为引用  static method() {    console.log(Me.name);  }};// 外部使用 MyClass 来访问类MyClass.method(); // 输出:未定义 Me.name

类表达式是一个更灵活的选择,适用于特定场景。


严格模式(strict mode)

严格模式是 JavaScript 中的一个重要的编程模式,它通过 use strict 关键字开启。在 strict 模式下,某些动作会被限制或抛出错误。以下是 strict 模式的特点:

  • 变量提升:严格模式下不存在变量提升。
  • 严格键检查:某些操作(如 delete)可能会抛出错误。
  • 行末不允许:严格模式要求代码块以 } 结束。
  • 严格参数访问:函数参数的访问严格遵循它的定义。

  • strict 模式的影响

    对变量的影响

    • 必须先声明变量再使用。
    • 不允许使用保留字或关键字作为变量名。
    • delete 操作符将抛出错误。

    对对象的影响

    • 只读属性不可修改会抛出错误。
    • 不可配置的属性无法使用 delete
    • 不可扩展的对象无法添加新属性。

    对函数的影响

    • 不允许使用 this 引指当前 window 对象。
    • 参数必须唯一,重复的参数会抛出错误。
    • arguments 对象与函数参数的值独立。

    注意事项

  • 默认严格模式:从 ES6 开始,JavaScript 的默认模式就是严格模式。
  • 不存在变量提升:严格模式下不会有变量自动提升。
  • 模块和类默认严格模式:类和模块默认启用严格模式。
  • 代码高效性:严格模式通常会提高代码的编译和执行效率。

  • 通过以上知识,我们可以更好地理解和使用 JavaScript 的类和严格模式。在实际开发中,合理地使用这些概念可以使代码更加规范和可维护。

    转载地址:http://bawiz.baihongyu.com/

    你可能感兴趣的文章
    Text-to-Image with Diffusion models的巅峰之作:深入解读 DALL·E 2
    查看>>
    TCP基本入门-简单认识一下什么是TCP
    查看>>
    tableviewcell 中使用autolayout自适应高度
    查看>>
    Symbolic Aggregate approXimation(SAX,符号聚合近似)介绍-ChatGPT4o作答
    查看>>
    Orcale表被锁
    查看>>
    svn访问报错500
    查看>>
    Orderer节点启动报错解决方案:Not bootstrapping because of 3 existing channels
    查看>>
    org.apache.ibatis.exceptions.PersistenceException:
    查看>>
    org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned
    查看>>
    org.apache.ibatis.type.TypeException: Could not resolve type alias 'xxxx'异常
    查看>>
    org.apache.poi.hssf.util.Region
    查看>>
    org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;
    查看>>
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /
    查看>>
    org.hibernate.HibernateException: Unable to get the default Bean Validation factory
    查看>>
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
    查看>>
    SQL-CLR 类型映射 (LINQ to SQL)
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
    查看>>
    org.tinygroup.serviceprocessor-服务处理器
    查看>>