iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中的类有什么问题
  • 596
分享到

JavaScript中的类有什么问题

2024-04-02 19:04:59 596人浏览 八月长安
摘要

这篇文章主要介绍“javascript中的类有什么问题”,在日常操作中,相信很多人在JavaScript中的类有什么问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java

这篇文章主要介绍“javascript中的类有什么问题”,在日常操作中,相信很多人在JavaScript中的类有什么问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中的类有什么问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

并不是说 js 的类有问题,但是如果你使用该语言已有一段时间,特别是使用过ES5,那么你可能就知道了从原型继承到当前类模型的演变。

原型链会有什么问题?

以我的拙见,这个问题的答案是:没有。但是社区花了很多年的时间才将类的概念强加到不同的结构和库中,因此ECMA技术委员会决定无论如何都要添加它。

你会问,这有什么问题吗?这就是他们真正做的,在我们已经拥有的原型继承之上添加了一些构成,并决定将其称为类,这反过来又让开发人员认为他们正在处理一种面向对象的语言,而实际上它们并不是。

类只不过是语法糖

jS 没有完全的 OOP 支持,它从来没有,这是因为它从来都不需要它。

表面上,当前版本的类显示OOP范例,因为:

  • 我们可以创建基本的类定义,用非常经典的语法将状态和行为分组在一起。

  • 我们可以从一个类继承到另一个类。

  • 我们可以在公有和私有之间定义属性和方法的可见性(尽管私有字段仍然是一个实验性的特性)。

  • 我们可以为属性定义getter和setter。

  • 我们可以实例化类。

那么为什么我说类是语法糖呢?因为尽管在表面上,它们看起来是非常面向对象的,但是如果我们试图做一些超出它们可能的事情,比如定义一个类扩展两个类(目前不可能的事情),我们需要使用下面的代码

// 辅助函数 function applyMixins(derivedCtor, baseCtors) {     baseCtors.forEach(baseCtor => {         Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {             let descriptor = Object.getOwnPropertyDescriptor(baseCtor.prototype, name)             Object.defineProperty(derivedCtor.prototype, name, descriptor);         });     }); }  class A {   methodA () {     console.log('A')   } }  class B {   methodB () {     console.log('B')   } }  class C {  }  // 使用 mixins

我们需要这样做,因为在JS中我们无法编写:

class A {      methodA(){         console.log("A")     } }  class B {      methodB(){         console.log("B")     } }  class C extends A, B {  }

在上面的示例中,关键部分应该是applyMixins函数。如果,你没有完全理解它试图做什么,但可以清楚地看到它正在访问所有类的原型属性来复制和重新分配方法和属性。这就是我们需要看到真相的地方:类只不过是在经过验证的原型继承模型之上的语法糖。

这是否意味着我们应该停止使用类?当然不是,重要的是要理解它,而且如果我们想做些突破类的限制,那么我们就必须用原型来处理。

JS 的OOP 模型缺失了什么呢?

如果我们当前的OOP模型是如此之薄,仅是原型继承的抽象层,那么我们到底缺少什么呢?是什么让JS真正成为OOP?

看这个问题的一个好方法就是看看typescript在做什么。该语言背后的团队通过创建一些可以翻译成JS的东西,无疑将 JS  推向了极限。这反过来也限制了它们的能力。

目前 JS 中缺失的一些OOP构造具有内在的类型检查功能,在动态类型语言中没有真正的意义,这可能是它们还没有被添加的原因。

接口

接口可帮助定义类应遵循的api。接口的主要好处之一是,我们可以定义实现相同接口的任何类的变量,然后安全地调用其任何方法。

interface Animal {   speak() }  class Dog implements Animal{   speak() {     console.log("Woof!")   } }  class Cat implements Animal{   speak() {     console.log("Meau!")   } }  class Human implements Animal{   speak() {     console.log("Hey dude, what's up?")   } }  //如果我们在JS中有接口,我们可以放心地做: let objects = [new Dog(), new Cat(), new Human()] objects.forEach(o => o.speak())

当然,我们可以通过定义speak方法并覆盖它的类来实现同样的目的,但接口更加清晰和优雅。

抽象类

每当我尝试对我的代码进行完整的OOP操作时,我肯定会错过JS中的抽象类。抽象类是定义和实现方法的类,但永远不会实例化。这是一种可以扩展但从未直接使用的常见行为的分组方式。这是一个很好的资源,并且绝对可以在当前JS领域内实现而不会花费太多精力。

静态多态

静态多态性使我们可以在相同的类中多次定义相同的方法,但是具有不同的签名。换句话说,重复该名称,但要确保其接收不同的参数。现在我们有了JS的rest参数,这使我们可以拥有一个任意数字,但是,这也意味着我们必须在方法中添加额外的代码来处理这种动态性。相反,我们可以更清楚地区分方法签名,则可以将相同行为的不同含义直接封装到不同方法中。

JavaScript中的类有什么问题

左边的版本不是有效的JS,但它提供了一个更干净的代码,因此,阅读和理解起来比较容易。右边的版本是完全有效的,它阅读起来相对困难些,还要懂得一些 es6  的语法。

多态性通常是通过查看方法中接收到的参数的类型来实现的。但是,由于JS的工作原理,我们知道这是不可能的。

到此,关于“JavaScript中的类有什么问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: JavaScript中的类有什么问题

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中的类有什么问题
    这篇文章主要介绍“JavaScript中的类有什么问题”,在日常操作中,相信很多人在JavaScript中的类有什么问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2024-04-02
  • JavaScript的类出现了什么问题
    今天就跟大家聊聊有关JavaScript的类出现了什么问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。虽然JavaScript类看起来一切正常,但...
    99+
    2024-04-02
  • javascript中的类有什么作用
    本篇内容介绍了“javascript中的类有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • JavaScript中有什么基本类型
    这篇文章主要为大家展示了“JavaScript中有什么基本类型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中有什么基本类型”这篇文章吧。 ...
    99+
    2024-04-02
  • JavaScript的问答题有哪些
    这篇文章主要介绍“JavaScript的问答题有哪些”,在日常操作中,相信很多人在JavaScript的问答题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript的问答题有哪些”的疑惑有所...
    99+
    2023-06-27
  • javascript有什么原始类型
    小编给大家分享一下javascript有什么原始类型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • Javascript有什么Math数学类
    小编给大家分享一下Javascript有什么Math数学类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明random()返回0 ~ 1之间的随机数。[ 0 ,...
    99+
    2023-06-20
  • Javascript有什么函数类型
    这篇文章主要讲解了“Javascript有什么函数类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Javascript有什么函数类型”吧! ...
    99+
    2024-04-02
  • JavaScript为什么没有类的概念?
    JavaScript是一种面向对象的编程语言,但与传统的面向对象语言不同的是,它没有类的概念。这是许多开发人员在学习JavaScript时经常遇到的困惑之一,因为许多其他编程语言如Java、C++、Python等都具有类的概念,而且在这些语...
    99+
    2023-05-14
  • Javascript面试中经常被问到的问题有哪些
    这篇文章主要讲解了“Javascript面试中经常被问到的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Javascript面试中经常被问到的问题...
    99+
    2024-04-02
  • JavaScript的进阶问题有哪些
    本篇内容主要讲解“JavaScript的进阶问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript的进阶问题有哪些”吧!1. 输出是什么?...
    99+
    2024-04-02
  • javaScript中日期工具类DateUtils有什么用
    小编给大家分享一下javaScript中日期工具类DateUtils有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内...
    99+
    2024-04-02
  • javascript中有没有类
    本篇内容主要讲解“javascript中有没有类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript中有没有类”吧! ...
    99+
    2024-04-02
  • JavaScript的Promise常见问题有哪些
    这篇“JavaScript的Promise常见问题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2024-04-02
  • JavaScript的面试问答题有哪些
    本篇内容介绍了“JavaScript的面试问答题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaScript的数据类型都有什么?...
    99+
    2023-06-27
  • javascript中原始类型和引用类型有什么区别
    小编给大家分享一下javascript中原始类型和引用类型有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、区别(1)原始类型存储的是值,引用类型存储的...
    99+
    2023-06-15
  • Javascript基础中的十个重要问题分别是什么
    Javascript基础中的十个重要问题分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.什么是Javascript?Javascript是一种用于W...
    99+
    2023-06-22
  • javascript中类指的是什么意思
    小编给大家分享一下javascript中类指的是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • JavaScript中有什么数据类型转换函数
    这篇文章给大家分享的是有关JavaScript中有什么数据类型转换函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 数据类型转换函数有:toExpo...
    99+
    2024-04-02
  • 开发中经常遇到的JavaScript问题有哪些
    今天就跟大家聊聊有关开发中经常遇到的JavaScript问题有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。获取一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作