javascript物件導向程式設計,javascript物件導向

來源:互聯網
上載者:User

javascript物件導向程式設計,javascript物件導向


       在學習js物件導向編程之前,首先需要知道什麼是物件導向。物件導向語言都有類的概念,通過它可以建立具有相同屬性和方法的對象。但js並沒有類的概念,因此js中的對象和其他語言的對象有所不同。

       js對象可以定義為:”無需屬性的集合,其屬性可以是基本值、對象和函數。每個對象都是基於一個參考型別建立的。

       js建立對象有以下兩種方法:

       1、建立一個Object執行個體:

        

var person = new Object();

       2、使用對象字面量:

      

 var person ={};

      3、原廠模式:

    

  function createPerson(name,age,job){      var p = new Object();     p.name=name;     p.age=age;     p.job=job;    return p;    }   var p1=createPerson("jack",22,“front-end Engineer");  var p2=.....;

    4.建構函式模式:

    

 function Person(name,age,job){     this.name=name;     this.age=age;    this.job=job;     this.sayName=function(){alert(this.name);};     }    var p1= new Person("jack",22,"front-end Engineer");   var p2=...;

   這裡暫停一下,因為建構函式模式比較重要,這裡解釋一下:這裡實際上是經曆了以下4個步驟:

    (1)建立一個對象;

     (2)將建構函式範圍賦給這個對象(所以this將指向這個新建立的對象)

    (3)執行裡面的代碼,為新對象添加屬性;

    (4)返回新對象;

     上面建立的p1和p2都有一個constructor的屬性,它指向Person。並且p1和p2即使Person的執行個體,同時也是Object的執行個體,因為所有對象都繼承自Object。

     缺陷:每個方法都要在執行個體上重新建立一遍,js中的函數是對象,因此可以將函數轉移到建構函式的外部:

    

 function Person(name,age,job){           this.name=name;          this.age=age;          this.job=job;          this.sayName=sayName;    }     fucntion sayName(){        alert("this.name");   }      var p1=.....;      var p2=....;

     5.原形模式:

     我們建立的函數都有一個prototype屬性,它是一個指向一個對象的指標。


JavaScript物件導向編程

自從有了Ajax這個概念,JavaScript作為Ajax的利器,其作用一路飆升。JavaScript最基本的使用,以及文法、瀏覽器對象等等東東在這裡就不累贅了。把主要篇幅放在如何?JavaScript的物件導向編程方面。

1. 用JavaScript實作類別
JavaScritpt沒有專門的機制實作類別,這裡是藉助它的函數允許嵌套的機制來實作類別的。一個函數可以包含變數,又可以包含其它函數,這樣,變數可以作為屬性,內部的函數就可以作為成員方法了。因此外層函數本身就可以作為一個類了。如下:

function myClass()
{
//此處相當於建構函式
}這裡 myClass就是一個類。其實可以把它看成類的建構函式。至於非建構函式的部分,以後會詳細描述。

2. 如何獲得一個類的執行個體
實現了類就應該可以獲得類的執行個體,JavaScript提供了一個方法可以獲得對象執行個體。即 new操作符。其實JavaScript中,類和函數是同一個概念,當用new操作一個函數時就返回一個對象。如下:
var obj1 = new myClass();
3. 對象的成員的引用
在JavaScript中引用一個類的屬性或方法的方法有以下三種。
1> 點號操作符
這是一種最普遍的引用方式,就不累贅。即如下形式:
對象名.屬性名稱;
對象名.方法名;
2> 方括弧引用
JavaScript中允許用方括弧引用對象的成員。如下:
對象名["屬性名稱"];
對象名["方法名"]; 這裡方括弧內是代表屬性或方法名的字串,不一定是字串常量。也可以使用變數。這樣就可以使用變數傳遞屬性或方法名。為編程帶來了方便。在某些情況下,代碼中不能確定要調用那個屬性或方法時,就可以採用這種方式。否則,如果使用點號操作符,還需要使用條件判斷來調用屬性或方法。
另外,使用方括弧引用的屬性和方法名還可以以數字開頭,或者出現空格,而使用點號引用的屬性和方法名則遵循標示符的規則。但一般不提倡使用非標示符的命名方法。

3> 使用eval函數
如果不希望使用變數傳遞變數或方法名,又不想使用條件判斷,那麼eval函數是一個好的選擇。eval接收一個字串類型的參數,然後將這個字串作為代碼在上下文中執行,返回執行的結果。這裡正是利用了eval的這一功能。如下:
alert(eval("對象名." + element.value));
4. 對對象屬性,方法的添加、修改和刪除操作
JavaScript中,在產生對象之後還可以為對象動態添加、修改和刪除屬性和方法,這與其它物件導向的語言是不同的。
1> 添加屬性和方法
先建立一個對象,Null 物件建立後沒有任何屬性和方法,然而我們可以在代碼中建立。
var obj1 = new Object();
//添加屬性
obj1.ID = 1;
obj1.Name = "johnson";

//添加方法
obj1.showMessage = function()
{
alert("ID: " ......餘下全文>>
 
javascript物件導向編程問題?

如果你從javascript來瞭解物件導向編程,那你很難理解。
因為javascript的function就是既是函數,又是類。
不建議你這麼理解物件導向。
你以上代碼,第一段是一個類,建構函式有2個參數html,high。

第二段代碼是給類boxPlug添加方法。prototype的作用是使boxPlug的執行個體對象可是使用方法method 。
建議你還是先理解物件導向在來瞭解javascript的物件導向。因為javascript的物件導向很彆扭的。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.