返回顶部
首页 > 资讯 > 精选 >JS怎么使用function实现一个class
  • 389
分享到

JS怎么使用function实现一个class

2023-07-04 19:07:00 389人浏览 安东尼
摘要

本文小编为大家详细介绍“js怎么使用function实现一个class”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS怎么使用function实现一个class”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。正

本文小编为大家详细介绍“js怎么使用function实现一个class”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS怎么使用function实现一个class”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

正文

使用function来写出一个class的类对于我们来说当然是简单的,但必须注意的是,要做好function实现一个class,那么就要必须实现达到高精准度的模仿,把该实现的细节都实现好,才能更好的对class进行深入的理解

开始写出我们的class

class MyClass{    constructor(name){        this.name = name    }    fun(){        console.log('myName:'+this.name)    }}

这是一个平平无奇的class,接着我们使用function来对其进行一下实现。

function MyClass1(name){    this.name = name}MyClass1.prototype.fun = function(){    console.log('myName:'+this.name)}let m1 = new MyClass1('aaa')m1.fun() //myName:aaa

让我们继续完善一下function的实现,我们先一步一步来

Tip1:class只能通过new调用

class MyClass{    constructor(name){        this.name = name    }    fun(){        console.log('myName:'+this.name)    }}// MyClass('aaa') //TypeError: Class constructor MyClass cannot be invoked without 'new'

对于类的调用,只能通过new来进行实例化,而不能通过直接调用,下面我们在function来实现这个操作

如何判断是通过new调用而不是通过直接调用,这个时候this的熟练度就显得比较重要了,不熟悉也不要急,让我们一起来打印看看

function MyClass1(name){    console.log(this)    this.name = name}let m1 = new MyClass1('aaa') //MyClass1 {}MyClass1('aaa') //window
  • 对于new调用,函数内部的this指向构造函数 (new绑定)

  • 直接调用 那么很明显this指向的是全局(默认绑定)

根据这个特点,在构造函数里面判断this的指向,从而抛出报错,即可实现class的效果

function MyClass1(name){    console.log(this)    if(!(this instanceof MyClass)){ //如果this不是指向MyClass        throw new TypeError('TypeError: Class constructor MyClass cannot be invoked without 'new'')    }    this.name = name}

Tip2:class中的函数不能被枚举

let m = new MyClass('aaa')for(let i in m){    console.log(i) //name}let m1 = new MyClass1('aaa')for(let i in m1){    console.log(i) //name fn}

从上可以看出类中的函数不能被枚举出来,枚举我们就想到了enumerable,也就是Object.defineProperty来对原型上的fn进行设置

'use strict'function MyClass1(name){    this.name = name}Object.defineProperty(MyClass1.prototype,'fn',{    value:function(){        console.log('myName:'+this.name)    },    enumerable:false})

好的,我们离完美又更近了一步。

Tip3:class中的函数不能被new调用

同样是new调用的方式,不能对类中的函数进行new调用

let m = new MyClass('aaa')new m.fun() //TypeError: m.fun is not a constructor

在这里会抛出一个错误,所以在用function实现类的时候也要避免这个问题,function中的函数都是可以通过new来进行调用的,我们来进行修改,有了上面对new的判断经验,很容易来解决这个问题

Object.defineProperty(MyClass1.prototype,'fn',{    value:function(){        //不可通过new调用         console.log(this) //正常调用下的this是指向实例 MyClass1 { name: 'aaa' }        if(!(this instanceof MyClass1){//那么相反 不是正常调用的就是错误的调用            //error        }        console.log('myName:'+this.name)    },    enumerable:false})

同样使用this的判断来看下是不是通过new的调用,正常调用下的this是指向实例 MyClass1,那么相反 不是正常调用的就是错误的调用

最后是一个小小的细节

Tip4:在es6中使用类语法,代码都是在严格模式下运行

所以对于function的代码,需要在前面加上’user strict‘

'use strict'function MyClass1(name){    this.name = name}Object.defineProperty(MyClass1.prototype,'fn',{    value:function(){        console.log(this)        if(!(this instanceof MyClass1)){            //error            throw TypeError('error')        }        console.log('myName:'+this.name)    },    enumerable:false})let m1 = new MyClass1('aaa')m1.fn()// new m1.fn() //errorfor(let i in m1){    console.log(i) //name}

读到这里,这篇“JS怎么使用function实现一个class”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: JS怎么使用function实现一个class

本文链接: https://lsjlt.com/news/347036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS怎么使用function实现一个class
    本文小编为大家详细介绍“JS怎么使用function实现一个class”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS怎么使用function实现一个class”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。正...
    99+
    2023-07-04
  • 怎么使用ES6的class实现一个双向绑定
    这篇文章主要介绍“怎么使用ES6的class实现一个双向绑定”,在日常操作中,相信很多人在怎么使用ES6的class实现一个双向绑定问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用ES6的class实现...
    99+
    2023-07-04
  • Java 中怎么实现一个Class解析器
    Java 中怎么实现一个Class解析器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Class文件作为类或者接口信息的载体,每个Class文件都完整的定义了一个类。为了使Ja...
    99+
    2023-06-17
  • JS的Function与构造函数怎么使用
    这篇文章主要讲解了“JS的Function与构造函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS的Function与构造函数怎么使用”吧! 1.概述Function是...
    99+
    2023-06-21
  • 怎么使用ES6的class写一个双向绑定
    今天小编给大家分享一下怎么使用ES6的class写一个双向绑定的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。最终效果如下:构...
    99+
    2023-06-17
  • PHP中怎么使用class来声明一个接口
    在PHP中,可以使用关键字interface来声明一个接口。接口是一种抽象的类,其中定义了一组方法但不包含方法的实现。 下面是一个示...
    99+
    2024-03-04
    PHP
  • JS怎么实现一个微信录音功能
    今天小编给大家分享一下JS怎么实现一个微信录音功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。拆解需求根据原型图可以很容易...
    99+
    2023-07-05
  • 使用CSS怎么实现一个圆环
    使用CSS怎么实现一个圆环?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 两个标签的嵌套:<div class="element1">...
    99+
    2023-06-08
  • js怎么实现为每一个li添加一个点击事件
    本篇内容主要讲解“js怎么实现为每一个li添加一个点击事件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现为每一个li添加一个点击事件”吧!<u...
    99+
    2024-04-02
  • 使用JS实现一个Sleep函数的示例代码
    目录前言1.目标分析2.setTimeout 封装3.Promise 封装4.async/await总结前言 我们都是 JavaScript 是一个单线程语言,单线程有它的好处也有它...
    99+
    2024-04-02
  • 基于JS怎么实现一个小型编译器
    这篇文章主要讲解了“基于JS怎么实现一个小型编译器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于JS怎么实现一个小型编译器”吧!前言the-super-tiny-compiler&nbs...
    99+
    2023-06-30
  • 怎么使用CSS3实现一个3D相册
    这篇文章给大家分享的是有关怎么使用CSS3实现一个3D相册的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。布局直接看html布局:    <div class...
    99+
    2023-06-08
  • 使用Python怎么实现一个ORM模型
    本篇文章为大家展示了使用Python怎么实现一个ORM模型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。元类对于元类,我的理解其实也便较浅,大概是这个意思所有的类都是使用元类来进行创建的,而所有的类...
    99+
    2023-06-15
  • 使用JavaScript怎么实现一个计算器
    这期内容当中小编将会给大家带来有关使用JavaScript怎么实现一个计算器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体内容如下<!DOCTYPE html><html&...
    99+
    2023-06-14
  • 使用react怎么实现一个Radio组件
    使用react怎么实现一个Radio组件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。测试组件:class Test extends Comp...
    99+
    2023-06-14
  • 使用css怎么实现一个三角形
    使用css怎么实现一个三角形?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用CSS画三角形第一步首先,先来一个div,然后给这个div加一层border,并且...
    99+
    2023-06-14
  • 使用python怎么实现一个定时器
    这期内容当中小编将会给大家带来有关使用python怎么实现一个定时器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚...
    99+
    2023-06-14
  • 使用java怎么实现一个ATM功能
    使用java怎么实现一个ATM功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言...
    99+
    2023-06-14
  • 使用Java怎么实现一个万年历
    这篇文章给大家介绍使用Java怎么实现一个万年历,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5....
    99+
    2023-06-14
  • 使用Java怎么实现一个RPC框架
    使用Java怎么实现一个RPC框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、RPC简介RPC,全称为Remote Procedure Call,即远程过程调用,它是一个...
    99+
    2023-05-30
    java rpc
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作