首頁 > web前端 > js教程 > 主體

JavaScript建立物件的寫法_javascript技巧

WBOY
發布: 2016-05-16 17:24:13
原創
934 人瀏覽過

物件是什麼
從JavaScript定義上講物件是無序屬性的集合,其屬性可以包含基本值、物件或函數。也就是說物件是一組沒有特定順序的屬性,每個屬性會對應到一個值上,是一組鍵值對,值可以是資料或物件。

最簡單的對象
JavaScript的一對花括號{}就可以定義一個對象,這樣的寫法實際上和調用Object的構造函數一樣

複製程式碼 程式碼如下:

var obj={};

var obj={};;

var obj2 new Object();

這樣建構出來的物件只包含一個指向Object的prototype的指針,可以使用一些valueOf、hasQwnProperty等方法,沒有多大實際作用,自訂物件嘛總是要有一些自訂的屬性、方法神馬的。
複製碼


代碼如下:


var obj =0;
            obj.fn=function(){
            🎜>            var obj2={
               ){
                    alert(this);
        🎜>


可以在定義完對象後通過”.”為其添加屬性和方法,也可以使用字面量賦值方法在定義對象的時候為其添加屬性和方法,這樣創建的對象,其方法和屬性可以直接使用物件引用,類似於類別的靜態變數和靜態函數,這樣創建物件有一個明顯缺陷——在定義大量物件的時候很費力,要一遍遍的寫入幾乎是重複的程式碼。


抽像

既然是重複程式碼就可以抽像出來,用函數來做這些重複工作,在建立物件的時候呼叫一個專門建立物件的方法,對於不同的屬性值只需要傳入不同參數即可。

複製程式碼 程式碼如下:function var obj={};
                    return obj;
            }

          
                alert(this.a);
            });

這樣在創建大量物件的時候,就可以透過呼叫此方法來做一些重複工作了,這種方式也不完美,因為在很多時候需要判斷物件的類型,上面程式碼建立出來的物件都是最原始的Object物件實例,只是拓展了一些屬性和方法。

有型點

又是function登場的時候,JavaScript中function就是個對象,在創建對象的時候打可以拋開上面createObj方法,直接使用function作為對象,怎麼實現復用呢,這就在於function作為對象的特殊性了。

1. function可以接受參數,可以根據參數來建立相同類型不同值的物件

2. function作為構造函數(透過new操作符調用)的時候會返回一個對象,在貧下中農版jQuery中提到過一些構造函數的基本知識,簡單複製一下

建構函式的回傳值分為兩種情況,當function沒有return語句或return回一個基本型別(bool,int,string,undefined,null)的時候,傳回new 所建立的匿名對象,該物件即為函數實例;如果function體內return一個引用類型物件(Array,Function,Object等)時,該物件會覆寫new建立的匿名物件作為回傳值。

3. 那麼使用function怎麼解決類型識別問題呢,每個function實例物件都會有一個constructor屬性(也不是“有”,而是可以對應),這個屬性就可以指示其構造是誰,也可以使用instanceof 操作符來做判斷物件是否為XXX的實例。

不能光說不練,上碼

複製碼 代碼如下:

f =name;
                this.fn=function(){
                  }
            }

         🎜>
            console.log(person1.constructor==Person);//true
        
這樣就完美了吧,也不是!雖然建構子可以是物件有型,但物件的每個實例中的方法都要重複一遍!


複製碼

代碼如下:f =name;                this.fn=function(){                  }            }
         🎜>            var person2=new Person('Frank');

           
看看看,雖然兩個實例的fn一模一樣,但是卻不是一回事兒,這如果一個function物件有一千個方法,那麼它的每個實例都要包含這些方法的copy,很讓內存無語啊。


不玩兒虛的了


究竟有沒有一種近乎完美的構造對象的方式,及不用做重複工作,又有型,對象通用方法又不必重複?其實可以發現使用function已經距離要求和接近了,只差那麼一點兒——需要一個所有function對象的實例共享的容器,在這個容器內存發實例需要共享的屬性和方法,正好這個容器是現成的— —prototype,不了解prototype的同學可以看看
JavaScript prototype

複製程式碼

程式碼如下:


function Person(name){
                this.name=name;
      Person.prototype.share=[];

            Person.prototype. printName=function(){
                alert(this.name);
       new Person('Byron');
            var person2=new Person('Frank') ;

            console.log(person1.printName==person2.printName);//true



這樣每個Person的實例都有自己的屬性name,又有所有實例共享的屬性share和方法printName,基本問題都解決了,對於一般的對象處理就可以始終這個有型又有愛的創建對像模式了。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板