javascript物件導向的理解(一)

來源:互聯網
上載者:User

標籤:

第一次在園子發文:

關於js物件導向的理解:

  工廠方式是什嗎?建構函式是什嗎?原形鏈?對象的引用?

1.對象是什嗎?

在js接觸的比較多的就是對象了,比如: 

 1 var arr = []; 2  3 arr.number = 10;    //對象下面的變數:叫做對象的屬性 4  5 //alert( arr.number ); 6 //alert( arr.length ); 7  8 arr.a= function(){  //對象下面的函數 : 叫做對象的方法 9     alert(123);10 };11 12 arr.a(); // 123

通過 new Date() new String() 可以建立一個個對象。

2.工廠方式是什嗎?

//工廠方式 : 封裝函數function createPerson(name){    //1.原料    var obj = new Object();    //2.加工    obj.name = name;    obj.showName = function(){        alert( this.name );    };    //3.出廠    return obj;    }var p1 = createPerson(‘小明‘);p1.showName();

通過工廠方式,不需要new 一個函數,直接在函數內部建立一個新的對象,通過給新對象加屬性和方法,然後拋出。缺點是:不夠靈活。

3.建構函式是什嗎?

  

function CreatePerson(name){        this.name = name;    this.showName = function(){        alert( this.name );    };    }var p1 = new CreatePerson(‘小明‘);p1.showName();

通過在函數外部new 一個函數,執行個體化了一個對象就是建構函式(一般函數名遵循大寫)。在函數內部this就指向了這個執行個體化的對象,而不是指向window。屬性和方法都掛載到了執行個體化的對象上面去了。缺點:每個方法都掛載在新建立的執行個體化對象上面,如果需要執行個體化很多個物件,就造成了效能浪費。 

特別注意: 

p1.showName() == p2.showName();//false 因為如上,方法在每個執行個體化對象上面,為瞭解決這個問題,出現了在原型上面加方法。

 

4.對象的引用:

//example 1:var a = [1,2,3];var b = a;  b.push(4);alert(b);    //1,2,3,4;  // b沒有被賦值,只是把引用指向給了a,修改b就是修改a的值//example 2:var a = [1,2,3];var b = a;b = [1,2,3,4];alert(a); // 1,2,3 //雖然一開始b引用指向了a,但是後來b被賦值了,重新開創了記憶體單元,賦值成了[1,2,3,4],結果就沒有影響a// 物件類型:複製不僅僅是值的複製,也是引用的傳遞//example 3:var a = [1,2,3];var b = [1,2,3];alert(a == b);  // 物件類型 必須值和引用都相同才等於

 

5.原型:

function CreatePerson(name){        this.name = name;}
//在建構函式原型上添加方法CreatePerson.prototype.showName = function(){ alert( this.name ); };var p1 = new CreatePerson(‘小明‘);p1.showName();var p2 = new CreatePerson(‘大白‘);p2.showName();alert(p1.showName() == p2.showName()) //true

 

//給數組原型添加方法:Array.prototype.sum = function(){  var result = 0;    for(var i = 0; i<this.length; i++){       result += this[i];             }  return result;}arr = [1,2,3];alert(arr.sum()); //6

 

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.