探討物件導向中的幾個概念:1.一切事物皆對象,2.物件具有封裝與繼承特性,3.物件與物件之間使用訊息通信,各自存在著資訊隱藏。
1、工廠模式
ECMAScript 可以透過工廠模式來建立物件:
//工厂模式 function createObject(name, age) { var obj = new Object(); //创建对象 obj.name = name; //添加属性 obj.age = age; obj.run = function () { //添加方法 return this.name + this.age + '运行中...'; }; return obj; //返回对象引用 }; var obj1 = createObject('Lee', 100); //创建第一个对象 var obj2 = createObject('Jack', 200); //创建第二个对象 //alert(obj1.run()); //打印第一个对象实例的run()方法 //alert(obj2.run()); //打印第二个对象实例的run()方法 //alert(typeof obj1); //alert(typeof obj2); alert(obj1 instanceof Object); //true alert(obj2 instanceof Object); //true
透過工廠模式建立的對象,解決了重複實例化問題,但物件辨識問題無法解決(所有物件都是Object),因此要想解決物件辨識問題,我們採用下面的建構子。
2、建構子
//构造函数创建 function Person(name,age){ //所有构造函数对象都是Object this.name=name; this.age=age; this.run=function(){ return this.name+this.age+"ing..."; }; }; var person1=new Person('zhu1',100); var person2=new Person('zhu2',200); alert(person1.run()); alert(person2.run()); alert(person1 instanceof Object); //ture alert(typeof person2); //Person alert(person2 instanceof Person); // true var person3=new Object(); Person.call(person3,'zhu3',300);//对象冒充,person3是Object类型,冒充Person类型 alert(person3.run());
建構子中this:代表目前作用域物件的引用,如果在全域範圍this代表window對象,如果在建構函數體內,就代表當前建構函數所宣告的物件。
建構函式方法,及解決了重複實例化問題,有解決了物件辨識問題,對比跟工廠方法不同之處可知:
#1.建構函式方法沒有顯示的建立對象(new Object());
2.直接將屬性和方法值賦值給this;
3.沒有return 語句;
4.但是使用建構子創建必須使用new運算子;
以上是JavaScript如何用工廠模式和建構函式來建立物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!