簡單分析javascript物件導向與原型,javascript物件導向
本文主要內容參考來自JavaScript進階程式設計,物件導向與原型章節:
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); //truealert(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); //turealert(typeof person2); //Personalert(person2 instanceof Person); // truevar person3=new Object();Person.call(person3,'zhu3',300);//對象冒充,person3是Object類型,冒充Person類型alert(person3.run());
建構函式中this:代表當前範圍對象的引用,如果在全域範圍this代表window對象,如果在建構函式體內,就代表當前建構函式所聲明的對象。
建構函式方法,及解決了重複執行個體化問題,有解決了對象識別問題,對比跟Factory 方法不同之處可知:
1.建構函式方法沒有顯示的建立對象(new Object());
2.直接將屬性和方法值賦值給this;
3.沒有return 語句;
4.但是使用建構函式建立必須使用new運算子;
以上所述就是本文的全部內容了,希望大家能夠喜歡。