• JS复习:第六章


    创建对象

    一、工厂模式

    function createPerson(name,age,job){
        var o = new Object();
        o.name = name;
        o.age = age;
        o.job = job;
        o.sayName = function(){
            alert(this.name);
        };
        return 0;
    }
    
    var person1 = createPerson("Nicholas","29","Software Engineer");
    var person2 = createPerson("Greg","27","Doctor");

    工厂模式存在的缺陷是无法解决对象识别的问题。因此出现了构造函数模式

    二、构造函数模式

    创建自定义的构造函数,从而自定义对象类型的属性和方法。以上代码重写如下:

    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function(){
            alert(this.name);
        };
    }
    
    var person1 = new Person("Nicholas","29","Software Engineer");
    var person2 = new Person("Greg","27","Doctor");

    任何函数,只要通过new操作符来调用就可以作为构造函数。构造函数的缺点是每个方法都要在每个实例上重新创建一遍。

    三、原型模式

    function Person(){
    }
    Person.prototype.name = "Nicholas";
    Person.prototype.age = 29;
    Person.prototype.job = "Software Engineer";
    Person.prototype.sayName = function(){
        alert(this.name);
    };
    var person1 = new Person();
    person1.sayName();    //"Nicholas"
    
    var person2 = new Person();
    person2.sayName();     //"Nicholas"
    
    alert(person1.sayName == person2.sayName);    //"true"

    将sayName( )方法和所有属性直接添加到了Person的prototype属性中,构造函数变成空函数。任然可以通过调用构造函数在创建新对象,而且新对象还会具有相同的属性和方法。但与构造函数模式不同的是,新对象的这些属性和方法是由所有实例共享的。

  • 相关阅读:
    在IIS中浏览网站时出现:无法打开登录所请求的数据库 "***",登录失败
    Java中的深拷贝和浅拷贝(转载)
    Java的Final和C#的Const,Readonly比较分析(转载)
    C#中的Sealed和J#中的Final比较(转载)
    Java全系列帮助文档下载
    The Willpower Instinct(自控力,意志力)
    瓦片地图的前世今生(转载)
    创建CUDA项目
    CUDA warning C4819的消除
    并行调用
  • 原文地址:https://www.cnblogs.com/koto/p/5270987.html
Copyright © 2020-2023  润新知