本章移到“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. topcoder srm 706 div1

    1.给定一个迷宫,点号表示不可行,井号表示可行.现在可以改变其中的一些井号的位置.问最少改变多少个井号可以使得从左上角到右下角存在路径. 思路:设高为$n$,宽为$m$,若井号的个数$S$小于$n+m ...

  2. salt stack 远程命令

    salt stack 远程命令 salt stack是一种自动化的运维工具,可以同时对N台服务器进行配置管理.远程命令执行等操作. salt stack分为两个部分 salt-master,部署在控制 ...

  3. upc组队赛1 过分的谜题【找规律】

    过分的谜题 题目描述 2060年是云南中医学院的百年校庆,于是学生会的同学们搞了一个连续猜谜活动:共有10个谜题,现在告诉所有人第一个谜题,每个谜题的答案就是下一个谜题的线索....成功破解最后一个谜 ...

  4. 5. 多重背包问题 II 【用二进制优化】

    多重背包问题 II 描述 有 NN 种物品和一个容量是 VV 的背包. 第 ii 种物品最多有 sisi 件,每件体积是 vivi,价值是 wiwi. 求解将哪些物品装入背包,可使物品体积总和不超过背 ...

  5. 分布式事务框架&解决方案参考

    两种开源解决方案框架介绍: https://blog.csdn.net/zyndev/article/details/79604395#_97 LCN: https://www.jianshu.com ...

  6. 《操作系统_FCFS和SJF》

    先来先服务FCFS和短作业优先SJF进程调度 转自:https://blog.csdn.net/qq_34374664/article/details/73231072 一.概念介绍和案例解析 FCF ...

  7. 《WEB渗透一.信息收集》

    一.操作系统 Windows服务器  和 Linux服务器. 1.大小写敏感 Windows大小写不敏感 , Linux大小写敏感 如    www.xxxx.com/index.php   和  w ...

  8. jquery.form.js实现将form提交转为ajax方式提交的方法

    本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...

  9. 7、nginx的upstream及fastcgi模块应用

    ngx_http_proxy_module, ngx_http_upstream_module   ngx_http_proxy_module:实现反向代理及缓存功能 proxy_pass http: ...

  10. HDU 1247 Hat’s Words(字典树)

    http://acm.hdu.edu.cn/showproblem.php?pid=1247 题意: 给出一些单词,问哪些单词可以正好由其他的两个单词首尾相连而成. 思路: 先将所有单独插入字典树,然 ...