zoukankan      html  css  js  c++  java
  • JS设计模式

    一:设计模式

    1:工厂模式
    function createPerson(name,age,job){
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.job = job;
        obj.speak = function(){
            console.log(this.name);
        };
        return obj
    }
    var person1 = createPerson('panrui',20,'前端工程师')
    注释:解决了创建多个对象的问题,但是没有结解决对象识别的问题(怎样知道一个对象的类型)
    2:构造函数模式
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.speak = function(){
            console.log(this.name);
        };        
    }
    var person2 = new Person('panrui',20,'前端工程师')
    注释:没有显示的创建对象,没有返回语句,直接将属性赋给this对象,将Person的实例对象标识为一种特定的类型
    缺点:每个方法在每个实例上面都需要重新定义一遍,
    3:原型模式
    function Person(){
        
    }
    Person.prototype.name = 'panrui';
    Person.prototype.age = 23;
    Person.prototype.job = '前端工程师';
    Person.prototype.speak = function(){
        console.log(this.name)
    }
    var person3 = new Person()
    注意:省略了为构造函数传递初始化参数,结果所有实例享有相同的属性(对于函数实用,但是对于那些基本属性也说的过去,但是对于引用类型的数据就麻烦了)
    基本属性我们可以在实例当中添加一个同名属性,这样可以隐藏原型当中的对应的属性,但是引用类型的属性却会导致所有实例共享
    4:组合使用构造函数与原型模式
    构造函数用于定义实例属性,原型上面定义共享的属性和方法
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;    
    }
    Person.prototype.speak = function(){
        console.log(this.name)
    }
    var person4 = new Person()
    5:动态原型模式
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;    
        if(typeof this.speak != "function"){
            Person.speak = function(){
                console.log(this.name);
            };
        }
    }    
    不忘初心,不负梦想
  • 相关阅读:
    【bzoj1176】[Balkan2007]Mokia
    【bzoj1503】[NOI2004]郁闷的出纳员
    C#设置和获取系统环境变量
    结伙创业指南及翻脸法则
    Unity3D_(游戏)卡牌03_选关界面
    Unity3D_(游戏)卡牌02_主菜单界面
    Unity3D_(游戏)卡牌01_启动屏界面
    Unity3D_(游戏)跳一跳超简单制作过程
    如何将项目托管到Github上
    Android_(游戏)打飞机06:后续
  • 原文地址:https://www.cnblogs.com/panrui1994/p/9402831.html
Copyright © 2011-2022 走看看