简介:我们已经看到了“类”和“行为委托”在理论和思维模型方面的区别,现在看看在真实场 景中如何应用这些方法。首先看看 Web 开发中非常典型的一种前端场景:创建 UI 控件(按钮、下拉列表,等等)控件“类”你可能已经 ...

我们已经看到了“类”和“行为委托”在理论和思维模型方面的区别,现在看看在真实场 景中如何应用这些方法。

首先看看 Web 开发中非常典型的一种前端场景:创建 UI 控件(按钮、下拉列表,等等)

控件“类”


你可能已经习惯了面向对象设计模式,所以很快会想到一个包含所有通用控件行为的父类 (可能叫作 Widget)和继承父类的特殊控件子类(比如 Button)。

下面这段代码展示的是如何在不使用任何“类”辅助库或者语法的情况下,使用纯 JavaScript 实现类风格的代码:

js类与对象


在面向对象设计模式中我们需要先在父类中定义基础的 render(..),然后在子类中重写 它。子类并不会替换基础的 render(..),只是添加一些按钮特有的行为。

可以看到代码中出现了丑陋的显式伪多态,即通过 Widget.call 和 Widget. prototype.render.call 从“子类”方法中引用“父类”中的基础方法。

ES6的class语法糖


js类与对象


毫无疑问,使用 ES6 的 class 之后,上一段代码中许多丑陋的语法都不见了,super(..) 函数棒极了。(尽管深入探究就会发现并不是那么完美!)

尽管语法上得到了改进,但实际上这里并没有真正的类,class 仍然是通过 [[Prototype]] 机制实现的,

无论你使用的是传统的原型语法还是 ES6 中的新语法糖,你仍然需要用“类”的概念来对 问题(UI 控件)进行建模

本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.rzxsoft.cn学习互联网营销技术请到巅云建站www.rzxsoft.cn。