前端开发攻略---JS将class转换为function。满分写法无死角

这篇具有很好参考价值的文章主要介绍了前端开发攻略---JS将class转换为function。满分写法无死角。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、class写法

    class Example {
      constructor(name) {
        this.name = name
      }
      func() {
        console.log(this.name)
      }
    }

2、function写法

'use strict'

function Example(name) {
  if (!new.target) {
    throw new TypeError(`Class constructor Example cannot be invoked without 'new'`)
  }
  this.name = name
}
Object.defineProperty(Example.prototype, 'func', {
  value: function () {
    if (new.target) {
      throw new TypeError(`Example.prototype.func is not a constructor`)
    }
    console.log(this.name)
  },
  enumerable: false,
})
  1. 'use strict': class中的代码全部都是在一个严格模式下,对于一些不安全的操作会抛出错误,使代码更加规范。

  2. function Example(name) { ... }: 这是一个函数声明,函数名为 Example,它接受一个参数 name。这个函数充当了类的构造函数的角色。函数名与class名相同

  3. if (!new.target) { ... }: 这一行检查函数是否通过 new 关键字调用。class写法只能通过new关键字调用的。否则就会报如下错误前端开发攻略---JS将class转换为function。满分写法无死角,前端开发攻略,前端,javascript,开发语言而构造函数(普通函数)可以直接调用也可以通过new关键字来调用。new.target 是一个元属性,指向当前正在执行的构造函数或函数。如果函数没有通过 new 调用,意味着它被当做普通函数调用,而不是构造函数,因此会抛出一个 TypeError

  4. throw new TypeError(...):如果函数没有通过 new 关键字调用,抛出一个类型错误,指示 Example 构造函数不能在没有 new 关键字的情况下被调用。

  5. this.name = name: 这一行将参数 name 分配给新创建的对象的 name 属性。在函数内部,this 指向的是正在被创建的对象。

  6. class中的方法是不会被枚举的。所以需要通过Object.defineProperty(Example.prototype, 'func', { ... }): 这一行定义了一个不可枚举的属性 func,它是 Example.prototype 对象的一个属性。

  7. value: function () { ... }: 这是给 func 属性赋值,这个值是一个函数,实现了类中的 func 方法。

  8. 通过new关键字去class中的方法,比如:

    new Example.prototype.func()

    这样也是会报错的,但是在构造函数(普通函数中)是可以这样调用的。因此这里也需要进行判断。if (new.target) { ... }: 这一行再次检查 func 方法是否通过 new 关键字调用。如果是,则抛出一个 TypeError,因为 func 方法不应该被当做构造函数来调用。文章来源地址https://www.toymoban.com/news/detail-853134.html

到了这里,关于前端开发攻略---JS将class转换为function。满分写法无死角的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web前端面试-- js深拷贝的一些bug,特殊对象属性(RegExp,Date,Error,Symbol,Function)处理,循环引用weekmap处理

    本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 在JavaScript中,深拷贝和浅拷贝是两种不同的对象复制方式。 浅拷贝是指将一个对象的引用复制给另一个对象,这意味着两个

    2024年02月07日
    浏览(31)
  • 【js】js前端技巧之图片格式转换(File、Blob、base64):

    一、类型简介 BLOB(binary large object) : 二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 属性名称 读/写 描述 size 只读 Blob 对象中所包含数据的大小(字节)。 type 只读 一个字符串,表明该Blob对象所包含数据

    2024年02月07日
    浏览(38)
  • web前端框架JS学习之JavaScript类型转换

    vascript有多种数据类型,如字符串、数字、布尔等,可以通过typeof语句来查看变量的数据类型。数据类型转换就是数据类型之间相互转换,比如把数字转成字符串、把布尔值转成字符串、把字符串转成数字等,这在工作也是经常碰到的。 本期我们就给大家说说web前端框架JS学

    2024年02月10日
    浏览(41)
  • 前端JS必用工具【js-tool-big-box】,时间日期转换学习一

    这一小节,我们学习一下   js-tool-big-box 这个npm 前端工具库,关于时间日期格式转换的一部分,后续还会有。 目录 1 安装 2 项目中引入  3 工具使用  3.1 年月日时分秒的单独处理 3.2 以上方法中第一个参数 3.3 日期时间的转换  3.4 更个性的时间格式 4 本节总结 1 安装 使用 

    2024年04月23日
    浏览(30)
  • 前端开发攻略---Vue实现防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

    版权保护 :水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识别 :水印可以用作作者或品牌的标识符,使观众能够轻

    2024年04月17日
    浏览(32)
  • 前端中不同格式的日期相互转换(字符串、时间戳)js相关

    在项目中遇到了,需要实现字符串和Unix时间戳的相互转换,随手记录一下。 我使用的组件库为Naive UI,涉及到的组件为日期选择器(Date Picker)。作者在文档中写道: 实话说我不喜欢这个 feature,因为多数情况下,传递时间字符串不是个最佳实践。但是现实世界是复杂的,我

    2024年02月02日
    浏览(57)
  • 前端开发攻略---根据音频节奏实时绘制不断变化的波形图。深入剖析如何通过代码实现音频数据的可视化。

    逐行解析 JavaScript 代码块: 这几行代码首先获取了  audio  和  canvas  元素的引用,并使用  getContext(\\\'2d\\\')  方法获取了 Canvas 2D 上下文对象,以便后续在画布上进行绘图操作。 initCvs  函数用于初始化画布的尺寸。它将画布的宽度设置为窗口宽度的倍数,高度设置为窗口高度

    2024年04月15日
    浏览(45)
  • PHP 在function中直接实例化interface,不用再class 后 implement

    突发奇想,php能不能实现类似java 那种把interface 类当作方法的参数呢? java 代码如下: 经过调查,在国内的帖子上没有找到类似的实现。只好求助于google 了。我在 stackoverflow 上发布了一个帖子,然而第二天被告知和其他问题重复了。我看了那个问题,和我想要的差不多。

    2024年02月16日
    浏览(33)
  • 前端开发攻略---Vue通过自定义指令实现元素平滑上升的动画效果(可以自定义动画时间、动画效果、动画速度等等)。

    这个指令不是原生自带的,需要手动去书写,但是这辈子只需要编写这一次就好了,后边可以反复利用。 IntersectionObserver 是一个用于监测元素是否进入或离开视口(viewport)的 API。它可以帮助你在页面滚动时或者元素位置改变时进行回调操作,这样你就可以根据元素是否可见

    2024年04月11日
    浏览(42)
  • 【满分】【华为OD机试真题2023 JS】猜字谜

     时间限制:1s 空间限制:256MB 限定语言:不限 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下:     对于某个谜面和谜底单词,满足下面任一条件都表示猜中:     1)变换顺序以后一样

    2023年04月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包