本章移到“Object oriented programming”和"classes"。

看‘class orientation‘ 的设计模式: instantiation, inheritance, relative 多态性。

会重点讲解oop理论,当讲到Mixins, 我们会最终联系这些思想到真实的JS代码。

在这之前会先说大量的概念,pseudo-code,所以不要迷失,stick with it!!


Class Theory

OO or class oriented programming , 通过适当的设计把数据和行为一起打包。

在正式的计算机科学,也叫做数据结构。

Classes也暗示了类化某个数据结构的方法。

And thus, classes, inheritance, and instantiation emerge. 如:车辆, 小轿车, 具体一辆小轿车。

另一个概念是:多态。

描述了从父类继承基本的行为后,在一个子类重写这些基本的行为赋予更多特色。

因此,父类和子类对某一行为应当共享相同的name,以便子类重写。

如此做,会导致JS code变得脆弱和让人frustration.

"Class" Design Pattern

OOp这种设计模式只是一种可选的代码概念。

有些语言如C/PHP还有 procedural syntaxes。

JavaScript "Classes"

JS 有一些类的句法元素:new , instanceof

在ES6中添加了更多的,如class关键字。(见Appednix A)

但是,JavaScript 实际上是没有classes的

JS试图满足非常普遍的愿望:通过提供类似类的句法,用类设计!

事实:其他语言的类和JS中的“classes”是不一样的。

类是一种可选的设计模式,因此你可以选择在JavaScript中使用或者不用。

因为很多开发者喜欢用oop设计模式,所以本章会探索:JS提供了什么导致类的错觉,和我们经历的错误点。


Class Mechanics

在许多对象编程语言,标准库提供了a 'stack' 数据结构,作为一个Stack类。

这个类有内部的一系列变量用于存储数据。并且它会提供一系列的公共地可存取的行为(方法) 。

这让你的代码有和这个data交互的能力。

但是,你无需直接在Stack上操作。Stack 类只是一个抽象的解释关于任意的stack应当做什么,它自己不是一个'stack'。 你必须实例这个Stack类。然后才能有一个具体的数据结构的东西来操作。

Building 类的比喻:建筑物蓝图。

依照蓝图建立实物,这个实物就是instance。继承就是从一个基本蓝图,增加内容变成子蓝图。

Constructor

一般和类名字相同。实际就是初始化这个实例的任何状态。

例子:

Joe = new ClassName()

实例化了一个类。


Class Inheritance

没啥新的。略

class Vehicle {
engines = 1 ignition() {
output( "Turning on my engine." )
} drive() {
ignition()
output( "Steering and moving forward!" )
}
} class Car inherits Vehicle {
wheels = 4 drive() {
inherited:drive() //有些语言使用super
output( "Rolling on all ", wheels, " wheels!" )
}
}

Polymorphism 多态。

子类被他们的父类给予继承的行为的复制。

如果一个行为在子类被重写,不影响父类的行为,父类的原先版本的行为不会改变的。

Class inheritance implies copies.

类的继承就是暗含了复制!!

Multiple Inheritance

少数语言提供多重继承。

JS不提供原生的多重继承的机制!

但可以模仿。比如

You Don't Know JS: this & Object Prototypes( 第4章 Mixing "Class" Objects)的更多相关文章

  1. You Don't Know JS: this & Object Prototypes( 第5章 Prototypes)

    qu上章提到过[[prototype]] chain, 本章详细分析 ⚠️所有试图模仿类复制的行为,如上章提到的mixins的变种,完全规避了[[Prototype]] chain机制,本章会谈到这方 ...

  2. You Don't Know JS: this & Object Prototypes( 第2章 this)

    this is a binding made for each function invocation, based entirely on its call-site (how the functi ...

  3. You Don't Know JS: this & Object Prototypes( 第3章 对象)

    前2章探索了this绑定指向不同的对象需要函数引用的call-site. 但是什么是对象,为什么我们需要指向它们? 本章探索细节. Syntax the rules  that describe ho ...

  4. You Don't Know JS: this & Object Prototypes( 第一章 this or That?)

    Foreword this 关键字和prototypes 他们是用JS编程的基础.没有他们创建复杂的JS程序是不可能的. 我敢说大量的web developers从没有建立过JS Object,仅仅对 ...

  5. You Don't Know JS: this & Object Prototypes (第6章 Behavior Delegation)附加的ES6 class未读

    本章深挖原型机制. [[Prototype]]比类更直接和简单! https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%2 ...

  6. JS的Object漫想:从现象到“本质”

    转自:http://zzy603.iteye.com/blog/973649 写的挺好,用于记录,把对象分成概念的Object(var f={})和 类的Object(function F(){}) ...

  7. Javascript中Function,Object,Prototypes,__proto__等概念详解

    http://anykoro.sinaapp.com/2012/01/31/javascript%E4%B8%ADfunctionobjectprototypes__proto__%E7%AD%89% ...

  8. js中Object.defineProperty()和defineProperties()

    在介绍js中Object.defineProperty()和defineProperties()之前,我们了解下js中对象两种属性的类型:数据属性和访问器属性. 数据属性 数据属性包含一个数据的位置, ...

  9. js 之 object

    js之object 对象 ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值.对象或函数”.严格来说,这意味着对象是无特定顺序的值的数组. 尽管 ECMAScrip ...

随机推荐

  1. 日志统计 尺取法【蓝桥杯2018 C/C++ B组】

    标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...

  2. 解决Visual Studio(2017)软件无法重新生成问题

    https://blog.csdn.net/qq_38265674/article/details/80539228 笔者用VS2017打开VS2015创建的工程,出现如下图的问题. 不小心没有升级平 ...

  3. IDEA入门及maven配置

    idea基本使用 下载安装 idea下载地址 激活方法 上面的失效使用这个 配置SDKs和编译版本 选择jdk 我是主要用于Java开发,因此配置JDK8 配置编码 其他配置 个人配置主题等 注意 与 ...

  4. 论文笔记之:Graph Attention Networks

    Graph Attention Networks 2018-02-06  16:52:49 Abstract: 本文提出一种新颖的 graph attention networks (GATs), 可 ...

  5. Java 11 究竟比 8 快了多少?看看这个基准测试

    开源规划调度引擎 OptaPlanner 官网发布了一个 Java 11 GC 性能基准测试报告. 当前使用量最大的 Java 版本是 8,所以测试者用 Java 8 与 Java 11 进行对比测试 ...

  6. it做形式主语的句子

    1. it was considerate of you to visit my mother every day and (to) bring me your notes to help me wi ...

  7. HBase底层存储原理

    HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已! 首先HBase不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数 ...

  8. NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中

    由于XSSFWorkbook类型的Write方法限制,Write完成后就自动关闭流数据,所以无法很好的支持的Web模式,网上目前也未找到好的解决方案. 注意:若直接使用在WinForm项目中,必需先下 ...

  9. List<Model>转String 、String 转List<string>

    var ltCode = from item in psw.VehicleInsuranceItem select item.Code; string code = string.Join(" ...

  10. .Net MVC关于子页面引用js库问题

    layout页面中的配置: @RenderSection("scripts", required: false) @RenderSection("Styles" ...