js面對對象編程

來源:互聯網
上載者:User

        說到js,很大一部分人會說我很熟悉,在日常的web開發中經常用,那麼你的js代碼是符合面對對象思路的嗎?那你會問我面向過程的js代碼有什麼不好嗎?我的感受是面對對象的js編碼更加簡潔,減少了混亂,可維護行增強,適合編寫富用戶端時應用。


好了,首先看看js裡如何定義對象:

<html><head><script type="text/javascript">var obj=new Object();obj.name='josh';obj.age='26';console.log(obj.name);console.log(obj.age);</script></head><body></body></html></span>

        大家可以用firebug的console看下運行結果。在這段非常簡單的代碼中,我們new了一個Object型的對象,如果學過像java或C#這樣物件導向語言的人,對這樣的對象定義方式一定非常熟悉,只不過開頭的變數定義換成了var,這是由於js是弱類型的緣故。

        Object類型屬於js的內建物件類型,定義了obj之後,我們給obj的name和age屬性進行了賦值。這裡需要注意的事,js的對象可以動態添加屬性和方法,不像java,對象只能包含類的內容。我們在上面的代碼中再添加兩個方法:

var obj=new Object();obj.name='josh';obj.age='26';obj.getName=function(){return this.name;}obj.getAge=function(){return this.age;}console.log(obj.getName());console.log(obj.getAge());      

既然能添加,也能刪除:

var obj=new Object();obj.name='josh';obj.age='26';obj.getName=function(){return this.name;}obj.getAge=function(){return this.age;}delete obj.age;delete obj.getAge;console.log(obj.age);  //undefinedconsole.log(obj.getAge()); //obj.getAge is not a function

        那麼js對象的動態添加屬性方法的機制是什麼呢?在最根本的層面上,js對象是一個屬性的集合,非常類似於其他語言中的雜湊表,或者在java裡更為常用的map,因此我們可以再使用的任何時候,動態添加屬性或方法。



在js中,對象被認為是參考型別,為不同的變數賦相同對象的話,那麼執行的就是同一對象

var obj=new Object();obj.name='josh';obj.age='26';obj.getName=function(){return this.name;}obj.getAge=function(){return this.age;}obj1=obj;obj.age='30';console.log(obj1.getAge());

       好了,上面的用的object對象,屬於js的內建對象,除了Object類型還有Function,Array,Date,Error,Regexp,這些內建物件類型都屬於參考型別

var func=new Function('console.log("Hi");');var arr=new Array('Eric','lisa','josh');var date=new Date();var error=new Error("something bad happen");var reg=new RegExp('\\d+');

        js還提供了5中原始類型:分別是Boolean,Number,String,Null,Undefined。

//stringvar name='Eric';var selection='a';//numbervar num=10;var f=1.1;//booleanvar flag=false;//nullvar obj=null;//undefinedvar ref;
        大家需要知道的事,Number類型既可以包含整形,也可以包含浮點型。這裡也需要說說null和undefined的區別,undefined表示變數定義了,但未初始化,null表示對象不存在。


之所以介紹原始類型,是因為大家平常會見到這樣的代碼:

var name='Eric';var lowcasename=name.toLowerCase();   //ericvar fistLetter=name.charAt(0);  //E
就是在原始類型的的變數上調用了方法,這其實是js的內容為我們實現了一個裝箱的機制

var name='Eric';// 將原始類型使用new建立了一個對應的物件類型var temp=new String(name);var lowcasename=temp.toLowerCase();   //ericvar fistLetter=temp.charAt(0);  //E


除了上述使用new的方式簡曆對象,還可以使用literal Form(字串)的方式

//new object 的方式var obj=new Object();obj.name='josh';obj.age='26';obj.getName=function(){return this.name;}obj.getAge=function(){return this.age;}//literal Formvar obj1={name:'josh',age:'26',getName:function(){return this.name;},getAge:function(){return this.age;}}//new Array的方式var arr=new Array('Eric','lisa','josh');//literal Formvar arr1=['Eric','lisa','josh'];


        至此,本文講了 js對象動態增刪屬性及其機制,js的內建原始類型和參考型別 還有對象的兩種定義方式,有了這些基礎,我們後將陸續講解js對象的方方面面,包括繼承、封裝和多態。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.