zoukankan      html  css  js  c++  java
  • 简单工厂模式,构造函数模式,原型模式相关

    
    
        1.简单工厂模式  :无法确定对象类型
    2.构造函数模式 :私有话的问题
    3.原型模式


    // 1简单工厂模式
    function CreatPerson(name,age,sex){
    var obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.sex=sex;
    obj.sayName=function(){
    console.log("姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex);
    };
    return obj;

    }
    var person1=CreatPerson("iwen",20,"男人");
    person1.sayName();
    var person2=CreatPerson("ime",22,"女人");
    person1.sayName();
    /*
    * 函数CreatePerson能够根绝传入的参数构建不同的对象,并且可以保存对象的必要信息
    * 每一个对象保存的信息都是独立的。
    * 问题:person1和person2对象能知道是什么类型么?他属于谁?
    *
    * typeof instanceof
    *
    * */



    /*
    *
    * 构造函数模式
    * 在javascript中,构造函数可以用来创建特定类型的对象
    * Object,Array本身用的就是构造函数模式创建的
    *
    * */

    function Person(name,age,sex){
    this.name = name;
    this.age = age;
    this.sex =sex;
    this.sayName = function(){
    console.log("姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex);
    }
    }

    var person1 = new Person("iwen","19.8","男");
    var person2= new Person("ime","200.8","男");
    person1.sayName();
    person2.sayName();

    // * 在当前这个例子中,Person取代了CreatePerson,Person中的代码
    // * 除了与CreatePerson中相同的部分,不同的点
    // * 1.没有显示的创建对象
    // * 2.直接将属性和方法赋值给this对象
    // * 3.没有return对象
    // *
    // * 在构造函数中,我们需要使用关键字new去创建对象
    // * 在我们通过new创建对象的时候,会经历四个步骤
    // * 1.创建新的对象
    // * 2.将构造函数的作用域赋值给新的对象
    // * 3.执行构造函数中的代码(为这个新的对象添加属性和方法)
    // * 4.返回新的对象
    // *
    // * person1 和 person2 两个对象都有一个constructor(构造函数),而且这个属性都指向Person
    // *
    // *
    // * 只有构造函数才存在constructor

    //
    //
    // * 任何函数只要通过关键字new来调用,都可以看成是构造函数模式
    // * 任何函数也都可以通过赋值的形式进行调用

    /*
    *
    * 原型模式:
    *
    * */

    function Person(name,age){
    this.name = name; // 私有属性和方法
    this.age = age;
    this.oldSayName = function(){

    }
    }

    //并没有挂载在window身上,而是挂载原型身上
    Person.prototype.sayName = function(){ //公共方法
    console.log("姓名:"+this.name+" 年龄:"+this.age);
    };




    var person1 = new Person("iwen","20");
    var person2 = new Person("heihie","21");
    // person1.sayName();
    // person2.sayName();
    Person.prototype.sex = "男";
    person1.sex = "女";
    console.log(person1.sex);
    console.log(person2.sex);

    console.log(person1.sayName === person2.sayName);
    console.log(person1.oldSayName === person2.oldSayName);



    console.log(person1.sex === person2.sex);


    //原型模式还是存在一定的问题,如果存在多个原型链,可以继续优化

    function Fn(num1,num2){
    this.num1=num1;
    this.num2=num2;
    }
    var pro=Fn.prototype;
    console.log(pro);
    Fn.prototype={
    num3:function(){
    console.log("我是三");
    },
    num4:function(){
    console.log("我是四");
    },
    reset:function(){
    for(var key in pro){
    this[key]=pro[key];
    }
    },
    constructor:Fn
    };
    console.log( Fn.prototype);



  • 相关阅读:
    Go 好用第三方库
    Go 的beego 框架
    Go 的gin 框架 和 gorm 和 html/template库
    Go 常用的方法
    Dijkstra 的两种算法
    邻接矩阵
    next permutation 的实现
    最优二叉树 (哈夫曼树) 的构建及编码
    思维题— Count the Sheep
    STL— bitset
  • 原文地址:https://www.cnblogs.com/yuyufeng/p/5584879.html
Copyright © 2011-2022 走看看