• 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);
            };
        }
    }    
    不忘初心,不负梦想
  • 相关阅读:
    Tensorflow基础教程11:常用模块 tf.data :数据集的构建与预处理
    Tensorflow基础教程10:常用模块 TensorBoard:训练过程可视化
    Tensorflow基础教程9:常用模块 tf.train.Checkpoint 之变量的保存与恢复
    Tensorflow基础教程8:自定义层、损失函数和评估指标
    OC原理之多线程中的锁(一)
    OC原理之多线程(二)
    OC原理之多线程(一)
    OC原理之RunLoop的运行逻辑
    OC原理RunLoop(一)
    前端模块化:CommonJS,AMD,CMD,ES6
  • 原文地址:https://www.cnblogs.com/panrui1994/p/9402831.html
Copyright © 2020-2023  润新知