JS-对象的定义与创建

动态原型模式

    function Person(name, age, job){
        //properties
        this.name = name;
        this.age = age;
        this.job = job;
        //methods
        if (typeof this.sayName != "function"){
            Person.prototype.sayName = function(){
                console.log(this.name);
            };
        }
    }
    var friend = new Person("Nicholas", 29, "Software Engineer");
    friend.sayName();

工厂模式

    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 o;
    }
    var person1 = createPerson("Nicholas", 29, "Software Engineer");
    var person2 = createPerson("Greg", 27, "Doctor");
    person1.sayName();   //"Nicholas"
    person2.sayName();   //"Greg"

混合工厂模式

    function Person(name, age, job){
        var o = new Object();
        o.name = name;
        o.age = age;
        o.job = job;
        o.sayName = function(){
            alert(this.name);
        };
        return o;
    }
    var friend = new Person("Nicholas", 29, "Software Engineer");
    friend.sayName();  //"Nicholas"
    function SpecialArray(){
        //create the array
        var values = new Array();
        //add the values
        values.push.apply(values, arguments);
        //assign the method
        values.toPipedString = function(){
            return this.join("|");
        };
        //return it
        return values;
    }
    var colors = new SpecialArray("red", "blue", "green");
    console.log(colors.toPipedString()); //"red|blue|green"
    console.log(colors instanceof SpecialArray); // false

混合模式

    // 对象
    function Person(name, age, job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.friends = ["Shelby", "Court"];
    }
    // 对象原型
    Person.prototype = {
        constructor: Person, // 构造-引用定义
        sayName : function () { // 原型方法
            alert(this.name);
        }
    };
    var person1 = new Person("Nicholas", 29, "Software Engineer");
    var person2 = new Person("Greg", 27, "Doctor");
    person1.friends.push("Van");
    alert(person1.friends);    //"Shelby,Court,Van"
    alert(person2.friends);    //"Shelby,Court"
    alert(person1.friends === person2.friends);  //false
    alert(person1.sayName === person2.sayName);  //true