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); }; return o; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 62, "Doctor");
2.構造函數模式this
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", 62, "Doctor"); //與工廠模式的不一樣點 //1.沒有顯示創造對象 //2.直接將屬性和方法賦值給this //3.沒有return語句 //4.使用new創造對象 //使用方式 //1.當作構造函數使用 var person = new Person("Nicholas", 29, "Software"); person.sayName();//Nicholas //2.做爲普通函數調用 Person("Yellow", 27, "Doctor"); window.sayName();//Doctor //3. 在另外一個對象的做用域中調用 var o = new Object(); Person.call(o, "King", 25, "Nurse"); o.sayName();//King //缺點:每一個方法都要在每一個實例上從新建立一遍
3.原型模式spa
function Person() { } Person.prototype.name = "Yellowshorts"; Person.prototype.age = 29; Person.prototype.job = "Software"; Person.prototype.sayName = function () { alert(this.name); } var person1 = new Person(); person1.sayName();//Yellowshorts var person2 = new Person(); person2.sayName();//Yellowshorts alert(person1.sayName == person2.sayName);//true