JavaScript 建構函式 面相對象學習必備知識

來源:互聯網
上載者:User

複製代碼 代碼如下:function A(x)
{
this.x = x;
}
var obj = new A(5);
alert(obj.x);

這段代碼十分簡單,但是我們重要的是看到了一個十分驚訝的結果,obj被我們賦予了一個屬性x,就如同我們在C#中使用某個類的執行個體的時候一樣。那麼這個屬性是怎麼樣產生的呢?

關鍵語句:this.x=x。這句話就是進行一個屬性的申明與賦值,這裡,我們肯定會問到,this是什嗎?為什麼可以使用this.x來進行申明與賦值屬性呢?

其實this代表的就是我們剛剛執行個體化出來的obj,就相當於我們使用obj去調用了建構函式A裡面的屬性、方法等等。

那麼,我們怎麼樣去在建構函式中定義一個方法呢?

複製代碼 代碼如下:function A(x,y)
{
this.x = x;
this.y = y;
A.prototype.FunX = function(){alert(x)};
A.prototype.FunY = function(){alert(y)};
}
var obj = new A(5,10);
alert(obj.x);
alert(obj.y);
obj.FunX();
obj.FunY();

執行的結果十分簡單,彈出5、10、5、10的結果,可以看到 複製代碼 代碼如下:A.prototype.FunX = function(){alert(x)};
A.prototype.FunY = function(){alert(y)};

這兩句代碼定義了兩個方法,分別是FunX和FunY。那麼,如果現在出現了一種情況,如果我們需要臨時的給A函數添加方法怎麼辦呢?

複製代碼 代碼如下:function A(x,y)
{
this.x = x;
this.y = y;
}
A.prototype.FunX = function(){alert("5")};
var obj = new A(5,10);
alert(obj.x);
alert(obj.y);
obj.FunX();
A.prototype.FunY = function(){alert("10")};
obj.FunY();

運行這段代碼,我們可以看到,彈出的結果還是和以前的結果一樣,但是我們將兩個方法都定義在了外邊,而且方法FunY是定義在執行個體化之後的,那麼這裡大家看出來了什麼沒?很顯然,在我們使用obj.FunY()語句時候,代碼會重新的去構造一下obj,然後再來執行此方法,那麼如果代碼改成這樣? 複製代碼 代碼如下:obj.FunY();
A.prototype.FunY = function(){alert("10")};

很顯然,FunY()就不會去執行方法了。

下一遍,將會說一下關於JavaScript的建構函式與原型(prototype),若有疑問或不正之處,歡迎提出指正和討論。

相關文章

聯繫我們

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