前言
本文旨在记录JavaScript中常用的设计模式代码片段,简要说明使用场景,不过于追究细节,并给出网络上相关博客链接参考
先搞明白JavaScript中面向对象
一切都是对象
- 所谓对象就是若干属性的集合
- 数组、函数等都是对象,对象还是对象。像Number、Array、Function等这些函数,就是JavaScript默认的内建对象,可以直接使用 ,因此也常说JavaScript是基于对象的语言
- 对象里面的一切都是属性,方法也是属性,依然表示为键值对的形式
- 函数也可以有对象属性,其中JQ中的$就是一个函数,$.trim()中的trim()就是函数$中的一个方法属性
- JavaScript中的类型分为两种
- 值类型(非对象):undefined, number, string, boolean
- 引用类型(对象): 函数、数组、对象、null、new Number(10)、new String("1")、new Array(1) 等
- 判断对象方式:
- 使用
typeof
: 当返回时"function"或者"object"字符串说明是引用类型对象 - 使用
instanceof
- 使用
- 所有对象都是继承自Object对象的 ,Object对象包含了一些通用的方法如
hasOwnProperty , isPrototypeOf
等
函数和对象的关系
- 对象都是通过函数创建的
var obj = new Object()
语句中的Object就是构造函数var obj = {}
这种字面量的创建方式其实是构造函数方式的语法糖而已,仅仅形式不同
- 函数也是对象
- Object、Array、Number都是(构造)函数,通过
Number instanceof Object
返回true便可知
var MyFunction = function(){}
其中MyFunction也是对象,该对象是通过Function函数创建的
- Object、Array、Number都是(构造)函数,通过
一句话总结:对象都是由函数创建的,函数也是对象
prototype原型
- 未完成
继承
- 未完成
this关键字
- 未完成
执行上下文
- 未完成
执行上下文栈
- 未完成
作用域
- 未完成
自由变量和作用域链
- 未完成
闭包
- 未完成
再谈设计模式
简单工厂(Simple Factory)
简单工厂又叫做静态工厂方法( Static Factory Method ),由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象
类型:创建型
适用场景:
- 工厂类负责创建的对象比较少
- 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心
- 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用
代码片段:
//方式一:new对象
var Basketball = function(){
this.content = "篮球";
}
Basketball.prototype.getBallSize(){
console.log("直径20公分");
}
var Football = function(){
this.content = "足球";
}
Football.prototype.getBallSize(){
console.log("直径15公分");
}
//运动工厂
var SportFactory = function(name){
if (name == 'NBA') {
return new Basketball();
} else if (name == 'WorldCup') {
return new Football();
}
}
//方式二:创建一个新对象,然后包装增强属性和方法实现
function createBall(name,content){
//创建一个对象,然后扩展(这种方式又叫做寄生方式)
var o = new Object();
o.content = content;
o.getContent = function(){
return this.content;
}
//各个对象的差异部分
if (name == 'NBA') {
}
else if (name == 'WorldCup') {
}
return o;
}