(JS设计模式与开发实践笔记)前言&第一章

一.前言

  • 学习模式的作用
    熟悉设计模式的程序员,对某些模式的理解也许形成条件反射。当合适的场景出现时,他们可以很快地找到某种模式作为解决方案。
  • 模式在不同语言之间的区别
    因为语言的不同,一些设计模式在另外一些语言中的实现也许跟我们在《设计模式》一书中看到的大相径庭,这一点也不令人意外。
  • 设计模式的适用性
    1.软件开发的成本并非全部在开发阶段,设计模式的作用是让人们写出可复用和可维护性高的程序。
    2.所有设计模式的实现都遵循一条原则,即“找出程序中变化的地方,并将变化封装起来”。一个程序的设计总是可以分为可变部分和不变的部分。
  • 分辨模式的关键是意图而不是结构
    辨别模式的关键是这个模式出现的场景,以及为我们解决了什么问题。
  • 对JavaScript设计模式的误解
    1.习惯性把静态类型语言的设计模式照搬到JavaScript中。
    2.习惯根据模式的名字去臆测该模式的一切。
  • 模式的发展
    某种解决方案要成为一种模式,还是有及格原则需要遵守的。这几个原则即是“再现”、“教学”和“能以一个名字来描述这种模式”。

二.第一章:面向对象的JavaScript

  • JavaScript
  1. 动态类型语言的优点 / 缺点:代码数量少,简洁,程序员把更多精力放在业务逻辑上;无法保证变量的类型,程序运行期间有可能发生跟类型相关的错误。
  2. 鸭子类型:“如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子”。 利用鸭子类型的思想,我们不必借助超类型的帮助,就能轻松地在动态类型语言中实现一个原则:“面向接口编程,而不是面向实现编程”。
  3. "面向接口编程"是设计模式中最重要的思想。
  • 多态
  1. 多态的实际含义是:同一操作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
  2. 多态背后的思想是将"做什么"和"谁去做以及怎么去做"分离开来,也就是将"不变的事物"与"可能改变的事物"分离开来。
  3. 多态性的表现正是实现众多设计模式的目标。
  4. 使用继承来得到多态效果,是让对象表现出多态性的常用手段,包括继承和接口继承。
  5. 在JavaScript中,并不需要诸如向上转型之类的技术来取得多态的效果。
  6. 多态最根本的作用就是通过把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。
  7. 将行为分布在各个对象中,并让这些对象各自负责自己的行为,这正是面向对象设计的优点。
  • 封装
  1. 封装的目的是将信息隐藏,包括封装数据和封装实现,还包括封装类型和封装变化。
  2. 封装使得对象之间的耦合变松散,对象之间只通过暴露的API接口来通信。
  3. 创建型模式、结构型模式和行为型模式; 创建型模式的目的就是封装创建对象的变化;结构型模式封装的是对象之间的组合关系;行为型模式封装的是对象的行为变化。
  • 原型模式和基于原型继承的JavaScript对象系统
  1. 从设计模式的角度来讲,原型模式是用于创建对象的一种模式,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过类来创建这个对象。原型模式选择了另外一种方式,我们不再关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。
  2. 原型模式的实现关键,是语言本身是否提供了clone方法。 ECMAScript 5提供了Object.create方法
var Plane=function(){
	this.blood=100;
	this.attackLevel=1;
	this.defenseLevel=1;
};

var plane=new Plane();
plane.blood=500;
plane.attackLevel=10;
plane.defenseLevel=7;

var clonePlane=Object.create(plane);
console.log(clonePlane.blood);
console.log(clonePlane.attackLevel);
console.log(clonePlane.defenseLevel);
  1. 依赖倒置原则:程序要依赖于抽象接口,而不依赖于具体实现。
  2. JavaScript本身是一门基于原型的面向对象语言,它的对象系统是使用原型模式来搭建的,在这里称之为原型编程范式也许更合适。
  3. 基于原型链的委托机制就是原型继承的本质。
  4. 原型编程范式至少包括以下基本规则
    ①所有数据都是对象
    ②要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它
    ③对象会记住它的原型
    ④如果对象无法响应某个请求,它会把这个请求委托给它自己的原型
  5. JavaScript的函数既可以作为普通函数被调用,也可以作为构造器被调用。 当使用new运算符来调用函数时,此时的函数就是一个构造器。用new运算符来创建对象的过程实际上也就是先克隆Object.prototype对象,再进行一些其他额外操作的过程。
function Person(){
	this.name=name;
};

Person.prototype.getName=function(){
	return this.name;
};

var a=new Person("sven");

console.log(a.name);
console.log(a.getName());
console.log(Object.getPrototypeOf(a)===Person.prototype); //true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值