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



  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/yuyufeng/p/5584879.html
Copyright © 2011-2022 走看看