JavaScript面向对象/设计模式小抄集(持续更新)

前言

本文旨在记录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函数创建的

一句话总结:对象都是由函数创建的,函数也是对象

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;
}


参考

猜你喜欢

转载自www.cnblogs.com/DiDi516/p/11750028.html
今日推荐