JavaScript为什么使用原型模式而不是类模式

当当当
摘要由CSDN通过智能技术生成

导言: 作为JavaScript初学者的本菜鸡而言,刚一开始接触这门语言我就被他的原型模式给吓到了。并且在相当长的一段时间之内,我都完全不能理解或者不能接受这个模式。直到最近经过多方调查和思考才有所明悟。本篇文章就来记录一下我对JavaScript为什么使用原型模式而不是用类模式这个问题的一点看法。

为什么是原型模式面向对象

是啊,为什么是原型模式呢?类模式那么的优雅,那么容易理解,当今世界扛把子级别的语言无论是c++,Java还是Python等,全部都是基于类的面向对象。基于类的面向对象就类似于铸模和铸件的关系。我们精心维护好这样的铸模,然后生成一堆的铸件,这些铸件就可以愉快的运行在各行各业,起到相应的功能。当铸件出了一些问题之后没有关系,我重新在用铸模搞出一个铸件就可以了。也有可能铸模跟不上时代的发展了,也没有关系,我重新调整一下铸模的结构,这样以后就能生产出紧跟行业最新需求的铸件了。基于类的面向对象是多么的好啊,有了它我们就可以建设美丽新世界了!

甚至我一度以为,面向对象就是指的基于类的面向对象。直到我遇到了邪恶的JavaScript,一下子让我三观尽碎!

不过我还是存有一点侥幸心理,或许可能是那个JavaScript设计者设计这门语言时间过于仓促,没有考虑到基于类的面向对象这种设计是多么优雅,直到我后来读到下面这段内容:

在Brendan Eich为JavaScript设计面向对象系统时,借鉴了Self和Smalltalk这两门基于原型的语言。之所以选择基于原型的面向对象,不是因为时间匆忙,它设计起来相对简单,而是因为从一开始Brendan Eich就没有打算在JavaScript中加入类的概念。

苍天啊!JavaScript居然没有类的概念。到了ES6出了class关键字之后,也不过是基于原型的一种语法糖。可是你都没有类了,为什么还要搞new关键字,简直是脱裤子放屁。后来我又读到一段话:

然而很不幸,因为一些公司政治原因,JavaScript 推出之时受管理层之命被要求模仿 Java,所以,JavaScript 创始人 Brendan Eich 在“原型运行时”的基础上引入了 new、 this 等语言特性,使之“看起来更像 Java”。

好吧!不管怎么说,就是基于原型了。但是为什么要选原型呢?下面谈谈我的理解。

我想设计模式的差异可能是因为前端和后端面临的情况不太一样。对于在服务端运行的程序而言,更应该追求稳定性。而在客户端运行的程序,经常要面临和用户交互、渲染等任务,动态性的成分更多一些。因此服务端的程序使用基于类的面向对象,走铸模、铸件路线。我们做修改基本只改模具,不要铸件发挥自己的主观能动性。比如你在写Python或者Java程序的时候,你生成实例化对象之后,很少会要求对象变来变去吧。

而JavaScript希望对象尽可能发挥自己的主观能动性,干脆直接把模具扔了。玩起了原型模式和原型继承。没有模具那该如何搞对象呢?这个我们后面会讲到,首先来看一下JavaScript对象的主观能动性吧。

let
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值