You Don't Know JS: this & Object Prototypes( 第4章 Mixing "Class" Objects)
本章移到“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)的更多相关文章
- You Don't Know JS: this & Object Prototypes( 第5章 Prototypes)
qu上章提到过[[prototype]] chain, 本章详细分析 ⚠️所有试图模仿类复制的行为,如上章提到的mixins的变种,完全规避了[[Prototype]] chain机制,本章会谈到这方 ...
- 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 ...
- You Don't Know JS: this & Object Prototypes( 第3章 对象)
前2章探索了this绑定指向不同的对象需要函数引用的call-site. 但是什么是对象,为什么我们需要指向它们? 本章探索细节. Syntax the rules that describe ho ...
- You Don't Know JS: this & Object Prototypes( 第一章 this or That?)
Foreword this 关键字和prototypes 他们是用JS编程的基础.没有他们创建复杂的JS程序是不可能的. 我敢说大量的web developers从没有建立过JS Object,仅仅对 ...
- 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 ...
- JS的Object漫想:从现象到“本质”
转自:http://zzy603.iteye.com/blog/973649 写的挺好,用于记录,把对象分成概念的Object(var f={})和 类的Object(function F(){}) ...
- Javascript中Function,Object,Prototypes,__proto__等概念详解
http://anykoro.sinaapp.com/2012/01/31/javascript%E4%B8%ADfunctionobjectprototypes__proto__%E7%AD%89% ...
- js中Object.defineProperty()和defineProperties()
在介绍js中Object.defineProperty()和defineProperties()之前,我们了解下js中对象两种属性的类型:数据属性和访问器属性. 数据属性 数据属性包含一个数据的位置, ...
- js 之 object
js之object 对象 ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值.对象或函数”.严格来说,这意味着对象是无特定顺序的值的数组. 尽管 ECMAScrip ...
随机推荐
- Linux rsync 命令学习
Rsync命令和cp命令很像,但是功能似乎更加复杂点,主要用来备份数据.看了网上一堆介绍的文章,感觉不是很通俗易懂.下面按照我的理解,做一些笔记: 同步方式 之前接触过一些同步软件,例如坚果云.百度云 ...
- linux内核中的vgaarb是什么?
答: vga仲裁器(vga arbiter),是内核中的一个模块
- aria2的下载配置
aria2的命令行命令是: aria2c 一种方式: aria2c "http://host/file.zip" 如同wget 第二种方式: rpc server方式:
- Linux网络参数和ifconfig
目录 1.ifconfig 网络参数 2.ifup和ifdown 3.CentOS7网络配置相关文件 4.CentOS7默认网卡接口配置文件 5.补充命令 6.总结: 参考: 1.ifconfig 网 ...
- POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解
题意:n个老板n个员工,先给你n*n的数据,i行j列代表第i个老板第j喜欢的员工是谁,再给你n*n的数据,i行j列代表第i个员工第j喜欢的老板是谁,如果匹配到第k喜欢的人就会产生一个分数k-1.现在让 ...
- html 之 浮动(待补充)
通过设置float 样式属性来决定区块标签的浮动 问题:区块与非区块浮动的特点(左右) 区块与区块浮动的特点(左右) ie浏览器与谷歌等浏览器的效果差异
- 今天就整一个bug了
BeanPostProcessor加载次序及其对Bean造成的影响分析 SSM整合出现not found for dependency: expected at least 1 bean which ...
- 【团队】EasyKing的实现_1
完成部分 三个功能类 英雄. 子弹. 瓦片地图. 一个设置类 地图 实现功能 瓦片地图 英雄移动 攻击 受到攻击 TODO 子弹攻击范围 地图.建筑物和英雄的碰撞箱 音效 英雄技能 建筑 双人联机 物 ...
- JavaWeb 基础学习
XMAPP是自己封装的一套 web 开发套件 —— 例如Tomcat等是用自己的,而不是使用系统中其他地方安装好了的.此外将提供的 xampp 工具解压到 D 盘根目录下.(注意 xampp 一定要解 ...
- ECharts配置项之title(标题)
1.标题居中 //left的值为'left', 'center', 'right' title:{ left:'center' } 2.主副标题之间的间距 title:{ //默认为10 itemGa ...