js面向对象之创建对象1
生活随笔
收集整理的這篇文章主要介紹了
js面向对象之创建对象1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
方法一:工廠模式
所謂工廠模式,簡單點兒說就是按照工廠生產的過程創建對象,原材料->加工->返還產品
1 function createPerson(name,age,job) 2 { 3 //送入原材料 4 var o = new Object(); 5 //加工 6 o.name = name; 7 o.age = age; 8 o.job = job; 9 o.sayName = function(){ 10 alert(this.name); 11 } 12 //出廠 13 return o ; 14 } 15 16 var person1 = createPerson("Nicole",12,"software engnieer"); 17 var person2 = createPerson("Join",15,"writer");優點很明顯,解決了創建多個具有相似屬性和方法的對象的問題,但是卻沒有解決對象識別的問題
比方說:
方法二:構造函數模式
function Person(name,age,job) {this.name = name;this.age = age;this.job = job;this.sayName = function(){alert(this.name);} }var person1 = new Person("Nicole",12,"software engnieer"); var person2 = new Person("Join",15,"writer");從上面可以看出,構造函數模式,不在函數內部創建Object對象,而是用this代替,最后創建實例時使用new
其中:
經歷了以下幾個過程:
1.var o = new Object();
2.o = this(Person);
3.執行構造函數中的代碼;
4.返回新對象
優點:1.使用new創建對象,更符合面向對象的創建習慣;
? ? ? ? ?2.紅寶書上說創建構造函數意味著將它的實例標識為一種特定的類型,我的理解是,就是創建了一種類型,你可以用它去創建實例。
?為什么可以這樣呢,因為你用Person實例化的對象,它都保存了一個constructor屬性,指向Person。
alert(person1.constructor == Person);//truealert(person2.constructor == Person);//true缺點:首先,我們看一段代碼:
this.sayName = function(){}this.sayName = new Function("");這兩段代碼在邏輯上是等價的,也就是說在ECMAscript中,函數是對象,每定義一個函數,就會實例化一個對象,因此,不同實例的不同函數是不相等的,用構造函數模式創建的對象,雖然看起來是大家“共用”了一個功能函數,但其實它們都是不同的對象,這就很沒有必要。
轉載于:https://www.cnblogs.com/aiying/p/5430253.html
總結
以上是生活随笔為你收集整理的js面向对象之创建对象1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装交叉编译环境
- 下一篇: Instr()函数用法