JavaScript原型入门指南(二)

Let’s. Go. Deeper.

在这一点上,我们知道三件事:

  1. 如何创建构造函数
  2. 如何将方法添加到构造函数的原型中
  3. 如何使用Object.create将失败的查找委托给函数的原型

这三个任务似乎是任何编程语言的基础。 JavaScript是否真的那么糟糕,没有更简单,“内置”的方式来完成同样的事情? 正如你可能在这一点上猜测的那样,它是通过使用new关键字

我们采取的缓慢,有条理的方法有什么好处,你现在可以深入了解JavaScript中新关键字的内容。

回顾一下我们的Animal构造函数,最重要的两个部分是创建对象并返回它。 如果不使用Object.create创建对象,我们将无法在失败的查找上委托函数的原型。 如果没有return语句,我们将永远不会返回创建的对象。

这是关于new的一个很酷的事情 - 当你使用new关键字调用一个函数时,这两行是隐式完成的(“under the hood”),并且创建的对象称为this

使用注释来显示在幕后发生的事情并假设使用new关键字调用Animal构造函数,可以将其重写为此。

没有“under the hood”下的评论

这个工作的原因以及为我们创建这个对象的原因是因为我们使用new关键字调用了构造函数。 如果在调用函数时不使用new,则此对象永远不会被创建,也不会被隐式返回。 我们可以在下面的示例中看到这个问题。

此模式的名称是Pseudoclassical Instantiation。

如果JavaScript不是您的第一种编程语言,您可能会有点不安。

对于那些不熟悉的人,Class允许您为对象创建蓝图。 然后,无论何时创建该类的实例,都会获得一个具有蓝图中定义的属性和方法的对象。

听起来有点熟? 这基本上就是我们对上面的Animal构造函数所做的。 但是,我们只使用常规的旧JavaScript函数来重新创建相同的功能,而不是使用class关键字。 当然,它需要一些额外的工作以及一些关于JavaScript“under the hood”发生的事情的知识,但结果是一样的。

这是个好消息。 JavaScript不是一种死语言。 它不断得到改进,并由TC-39委员会补充。 这意味着即使JavaScript的初始版本不支持类,也没有理由不将它们添加到官方规范中。 事实上,这正是TC-39委员会所做的。 2015年,发布了EcmaScript(官方JavaScript规范)6,支持Classes和class关键字。 让我们看看上面的Animal构造函数如何使用新的类语法。

因此,如果这是创建类的新方法,为什么我们花了这么多时间来翻过旧的方式呢? 原因是因为新的方式(使用class关键字)主要只是我们称之为伪古典模式的现有方式的“语法糖”。 为了完全理解ES6类的便捷语法,首先必须理解伪古典模式。

在这一点上,我们已经介绍了JavaScript原型的基础知识。 本文的其余部分将致力于理解与其相关的其他“good to know”主题。 在另一篇文章中,我们将看看如何利用这些基础知识并使用它们来理解继承在JavaScript中的工作原理。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复