16 对象的几种创建方式

16.1 工厂模式,创建方式

    function createPerson(name,age,job){
        var o = new Object();
        o.name=name;
        o.age=age;
        o.job=job;
        o.sayName = function(){
            alert(this.name);
        }
    }
    var person1 = createPerson("da",1,"it");
    var person2 = createPerson("dada",2,"it");

16.2 构造函数模式

    function Person(name,age,ob){
        this.name=name;
        this.age=age;
        this.job=job;
        this.sayName = function(){
            alert(this.name);
        }
    var person1 = new Person("dada",1,"web");
    var person2 = new Person("dada",2,"web");
    }

16.3 使用原型模式

    function Person(){
    }
    Person.prototype.name = "da";
    Person.prototype.age = 1;
    Person.prototype.job = "web";
    Person.prototype.sayName = function(){
        alert(this.name);
    }
     
    var person1 = new Person();
    person1.sayName();    //"dada"
     
    var person2 = new Person();
    person2.sayName();    //"dada"
     
    alert(person1.sayName == person2.sayName);   //true

16.4 组合使用构造函数模式和原型模式

    function Person(name,age){
        this.name = name;
        this.age = age;
        this.friends = ["da","dada"];
    }
    Person.prototype = {
        constructor:Person,
        sayName:function(){
            alert(this.name);
        }
    }
    var person1 = new Person("da1",1);
    var person2 = new Person("da2",2);
    person1.friends.push("dadada");
    console.log(person1.friends);    //["da","dada","dadada"]
    console.log(person2.friends);    //["da","dada"]
    console.log(person1.friends === person2.friends);    //false
    console.log(person1.sayName === person2.sayName);   //true

16.5 动态原型模式

    function Person(name,age,job){
        this.name=name;
        this.age=age;
        this.job=job;
    
        if(typeof this.sayName!="function"){
            Person.prototype.sayName=function(){
                alert(this.name);
            };
        }
    }
Last Updated:
Contributors: leeguooooo