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);
            };
        }
    }    
    不忘初心,不负梦想
  • 相关阅读:
    Android笔记——UI开发
    P2P网络借贷系统-核心功能-用户投标-业务解说
    java回调简单实现
    Java面向对象编程(二)
    POJ-1190-生日蛋糕-DFS(深搜)-枚举-多重剪枝
    设计模式笔记——装饰模式
    bbed初体验
    高速理解环境变量
    最短路算法之 Dijkstra算法
    C++课程资源下载问题
  • 原文地址:https://www.cnblogs.com/panrui1994/p/9402831.html
Copyright © 2011-2022 走看看