JS面向对象编程指南

2018.6.24 星期日 11:25


人民邮电
2013.3


二,三,七-4 略过了

## 一 引言
### 1.1 回顾历史
### 1.2 变革之风
### 1.3 分析现状
### 1.4 展望未来
### 1.5 面向对象的程序设计
对象,类,封装,聚合,继承,多态
### 1.6 OOP概述
### 1.7 训练环境设置
### 1.8 使用firebug控制台

## 二 基本数据类型、数组、循环及条件表达式
### 2.1 变量
### 2.2 操作符
### 2.3 基本数据类型
### 2.4 基本数据类型综述
### 2.5 数组
### 2.6 条件与循环
### 2.7 注释

## 三 函数
### 3.1 什么是函数
### 3.2 预定义函数
### 3.3 变量的作用域
### 3.4 函数也是数据
### 3.5 闭包

## 四 对象
### 4.1 从数组到对象
### 4.2 内建对象
### 4.3
### 4.4
### 4.



## 五 原型
### 5.1 原型属性
利用原型添加方法与属性,利用原型的方法与属性,自身属性与原型,利用自身,isPrototypeOf(),神秘的proto链接
### 5.2 扩展内建对象
关于的讨论,一些原型陷进


## 六 继承
源码
### 6.1 原型链
示例,将共享属性迁移到原型中去
### 6.2 只继承于原型
### 6.3 uber-子对象访问父对象的方式
### 6.4 将继承部分封装成函数
### 6.5 属性拷贝
### 6.6 小心处理引用拷贝
### 6.7 对象之间的继承
### 6.8 深拷贝
### 6.9 object()
### 6.0 原型继承与属性拷贝的混合应用
### 6.1 多重继承
### 6.2 寄生式继承
### 6.3 构造器借用

## 七 浏览器环境
### 7.1 在html页面中引入js代码
### 7.2 概述:BOM和DOM
### 7.3 BOM
window对象再探,navigator,firebug备忘,location,history,frames,screen,open/close,moveTo/resizeTo,alert/prompt/confirm,setTimeout/setInterval,document
### 7.4 DOM
Core DOM与 HTML DOM,DOM节点的访问,修改,新建,移除,只适用于html的dom对象
### 7.5 事件
内联html属性法,元素属性法,dom的事件监听器,捕捉法与冒泡法,阻断传播,阻止默认行为,跨浏览器事件监听,事件类型
### 7.6 XMLHttpRequest对象
发送请求,处理响应,在早于ie7版本创建XMLHtttpRequest对象,A代表异步,X代表XML,实例示范

## 八 编程模式与设计模式
### 8.1 编程模式
行为隔离,命名空间,初始化分支,延迟定义,配置对象,私有属性和方法,特权函数,私有函数的公有化,自执行函数,链式调用,JSON

2019.4.6 星期六 12:25 $1


行为隔离:html,css,js
命名空间: namespace
初始化分支:不做过多假设,单独检测
延迟定义:第一次调用的时候设置
配置对象:第二个参数为对象,扩展方便
私有属性和方法:闭包($PS-js模式: 构造函数和立即执行函数,揭示模式)
Public:对象的属性(或方法)可以被所有人访问
Private:只有对象自己可以访问这些属性
Protectdd:仅该对象或其继承者才能访问这些属性
特权函数:普通的公共函数,但可以访问对象的私有属性和方法
私有函数的公有化:定义的私有函数又希望某些外部代码可以访问($PS-js模式:揭示模式)var _setStyle=function(){}
自执行函数:特别适合某些脚本加载是所执行的一次性初始化任务。也可用于创建和返回对象
链式调用:
JSON:不属于编程模式,是轻量级的数据交换格式

### 8.2 设计模式
单件1,单件2,工厂,装饰器,观察者

Book of Four或者Gang of Four或者GoF(代表书的4位作者)
大致三组:创建型,结构型,行为型。 共23个模式,发书后发现更多,只介绍4个

单件1:简单一个对象就是单件
单件2:构造器。1)检测全局变量;2)利用构造函数属性,但是该属性也是公有的;3)使用私有属性,利用闭包


### 3 工厂模式:多个相似对象而又不知道先使用哪种。代码根据输入或其他规则,自行决定创建那种类型对象
$PS-js模式:Object
1
2
// 动态创建委托给工厂函数.把多个if替换
MYAPP.dom.factory=function(type){return new MYAPP.dom[type]}


### 4 装饰器:结构型模式,考虑如何拓展对象的功能。不使用线性式(父-子-孙)
为一个基础对象创建若干个装饰对象以拓展其功能。然后由程序自行选择不同的装饰起,不按不同的顺序使用它们。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 装饰一颗圣诞树
var tree={}
tree.decorate=function(){console.log('make sure the tree wont\'t fall')}
tree.getDecorator=function(deco){
tree[deco].prototype=this; // 2 都继承自tree对象
return new tree[deco] // 1 添加额外装饰器,实现为构造器函数
}
// 2 创建爱呢第一个装饰器 RedBalls,并设为tree的属性. $PS: 每次都把基础的decorate重写了一遍
tree.RedBalls=function(){
this.decorate=function(){ // 提供decorate方法,先调用父类的方法
this.RedBalls.prototype.decorate()
console.log('put on some red balls')
}
}
// 2 添加其他装饰器,BlueBalls, Angel,
// 3 把装饰器都添加到基础对象中
tree=tree.getDecorator('RedBalls')
// 4 运行decorate方法
tree.decorate()


### 5 观察者:行为型模式,处理不同对象间互相通信。
订阅者/发行商模式。通常包含2类对象:一个或多个发行商对象,一个或多个订阅者对象
浏览器事件:浏览器-发行商, 事件订阅者会监听到这类事件,并在被通知。 浏览器为每一个订阅者发送一个事件对象

分两类:推送和发送。
推送实例。…混合类。。 任何一个对象都可以成为发行商,任何一个功能型对象都可以成为订阅者
观察者对象该有的属性和方法:1)由回调函数构成的订阅者数组;2)添加、删除;3)publish接受并传递数据给订阅者;4 make
$PS:观察者添加的订阅者是订阅者的一个方法/事件(回调),比如click,keydown,read,而不是一个对象。不能添加一个对象,需要添加的是对象的一个订阅行为(方法/事件),只有这样才是在行为发生的时候,订阅内容。该例中是‘读’的时候,而不是一个生硬的blogger对象
$PS: 下面例子发布者调用 this.publish好像有些问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var observer={
addSubscriber:function(callback){this.subscribers[this.subscribers.length]=callback},
addSubscriber:function(callback){},
publish:function(what){
for(var i=0;i<this.subscribers.length;i++){
if(typeof this.subscribers[i] === 'function'){
this.subscribers[i](what)
}
}
},
make:function(o){
for(var i in this){
o[i]=this[i]
o.subscribers=[]
}
}
}
// 创建订阅者>任意对象,某些重要事件发生时,调用publish方法
var blogger={
writeBolg:function(){
var content='today is '+new Date()
this.publish(content)
}
}
// 3 转为发行商
observer.make(blogger)
// 4 简单对象订阅blogger
var jack={
read:function(what){console.log('i just read ',what)}
}
blogger.addSubscriber(jack.read)


13:51 $1

11:46

knowledge is no pay,reward is kindness
0%