为什么 JavaScript 采用原型?
为什么 JavaScript 采用原型?
JavaScript 是一种基于原型的语言。
自从我第一次开始学习 JavaScript 以来,我一直在乏味地听到这个故事。那么,为什么 JavaScript 会采用原型呢?我将尝试总结我对采用我发现的原型的原因的猜测。
1. JavaScript 的诞生
要想知道 JavaScript 为何选择原型,自然要看 JavaScript 诞生的背景。当时,开发 JavaScript 的网景公司,正所谓“与微软的 Internet Explorer 抢占浏览器市场份额,作为其浏览器导航器的竞争对手出现。 浏览器大战 '正在发生。
在这样的背景下,JavaScript 的诞生就是为了给浏览器添加动画等简单的动态元素。为了增加浏览器的占有率,必须制作更多的网页在导航器上运行,这意味着更多的人不得不使用导航器提供的JavaScript。换句话说,他们希望它是一种简单的语言,即使是没有深入开发知识的设计人员和非开发人员也可以使用。所以 JavaScript 必须是一种“简单”的语言。
2. 用 JavaScript 创建对象
就个人而言,我认为揭示 JavaScript 简单性的最佳方式是创建一个对象。让我们在 JavaScript 中创建一个 person 对象。
const person = { 姓名:'bling',性别:'male' }
变量 person 现在包含一个新对象。现在让我们在 Java 中实现相同的操作。
公共类应用程序{ 公共静态无效主要(字符串[]参数){
final Person person = new Person("bling", "male");
}
公共静态类人{ 私有最终字符串名称;
私人最终字符串性别; 公共人员(最终字符串名称,最终字符串性别){
this.name = 名称;
this.gender = 性别;
}
}
}
一目了然,对于初学者来说,可以猜出哪个更简单。在创建对象之前,您可以创建一个类,指定对象具有哪些属性以及它应该是什么数据类型,然后才能创建对象。
当然,随着结构越来越复杂,规模越来越大,在相同的基础上比较语言就没有意义了。然而,考虑到“简单”的简单标准,JavaScript 是压倒性的。
原型是可以以这种方式创建对象的原因。 {}
如果您以这种方式创建对象,则为“对象文字” 新对象()
它的工作原理类似于创建一个对象创建空对象后, [[原型]]
如果属性是内置类 目的
的 原型
链接到参考属性。在那之后 {}
内部属性被创建为对象属性。
3.继承与委托
JavaScript 之所以如此简单,是因为在原型语言中重用代码的方式是由委托的概念组成的。
继承用于重用基于类的语言中的代码。继承是指创建一个新类的过程,该类与现有类几乎相同,但只有一些差异。创建一个新对象作为派生类的实例。如果通过继承父类来创建多个子类,则结构相似,因此具有可预测和稳定的优点。另一方面,问题在于,由于生成的类之间的耦合很大,所以一个部分的变化影响范围很广。因此,结构一旦建立就很难改变。另外,多重继承还有一个缺点,就是很难同时继承两个类。
使用委托以原型方式重用代码。当您创建一个新对象时,您可以通过引用已经存在的对象的一部分(即其原型)来重用代码。当然,由于对象的形状是灵活的,所以属性可以自由添加或删除,因此比较难预测,并且存在出错的可能性更高的问题。然而,由于没有强制执行直接的结构相似性,因此对象之间的耦合相对较弱。此外,可以通过引用多个对象的原型来实现多重继承。至关重要的是,由于这些特性,可以确保上述创建对象的简单性并同时创建其形状以制作简单的对象。
在理解内部实现方面,JavaScript 并不像看起来那么简单,但使用起来非常简单。即使是对开发没有深入了解的人也能够更轻松地编写更短更简单的代码。
JavaScript 基于原型的决定性原因是它的简单性。 JavaScript 诞生的目的是让非开发人员或开发知识很少的人能够进行开发。与必须创建类并预先定义其形状才能创建对象的类相比,JavaScript 能够非常简单轻松地创建对象。为了实现这一点,我认为最好的选择是构建一个通过委托重用代码的原型。
参考
You-Dont-Know-JS/README.md 在第 2 版 · getify/You-Dont-Know-JS
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明