javascript 建構函式和方法

來源:互聯網
上載者:User

在之前javascript 定義函數的方法這篇日誌裡面有提到建構函式,現在,來具體的介紹以下javascript的建構函式及方法的概念。

這是兩個及其有用的概念,對後面介紹javascript的物件導向機制,及其類方法,繼承的頓悟有著說不清,道不明的好處,

仔細理解一下吧

建構函式:

在javascript中,使用new運算子或者預定義的建構函式(如Object(),Date(),Function()等)都可以建立並初始化一個新的js對象。

建構函式具有如下兩個特性,其本質仍然是javascript函數:

它由new運算子調用

傳遞給它的是一個對新建立的Null 物件的引用,將該引用作為關鍵字this的值,而且它還要對新建立的對象進行適當的初始化

  //定義建構函式,
  function User(name,age)
  {
     this.name = name;
     this.age    = age;
 }

 //執行個體化兩個對象
 var simaopig = new User('simaopig','25');
 var xiaoxiaozi = new User('xiaoxiaozi','25');

這裡需要明白並且強迫自己接受如下觀點:建構函式知識初始化了特定的對象,但是其並不返回這個對象

在上例中,我們可以看到建構函式對this的引用,其只是初始化由this傳遞進來的對象,並且啥也不返回。

方法:

所謂方法(method),其實就是通過對象調用的javascript函數

其實函數又是什嗎?函數與方法又有啥不同?這似乎是一個哲學概念?雞是什嗎?那就是蛋啊。。

函數其實就是數值,其和方法沒有任何本質區別,之所以要交兩個名字,無非是要強調對象的作用罷了。

因為你完全可以把函數賦值給任何變數,當然也就包括了對象的屬性。

//執行個體化對象o
var o = new Object();

//把函數fun賦值給o的屬性method
o.method = fun;

//聲明函數fun
function fun()
{
return '250';
}

//調用o的屬性,效果同學們自己去查看,又是彈窗,值為250

alert(o.method());

方法有個非常重要的屬性,即在方法主體內部,關鍵字this的值為調用該方法的對象。

任何被用作方法的函數都會得到一個額外的實際參數,就是調用該函數方法的對象,也就是剛才我告訴你的this。

我為啥說函數其實就是方法,方法也就是函數呢?

函數是儲存在變數中的值,而那個變數也不過是全域對象的一個屬性,因此,當你調用一個函數是,其實就是在調用全域對象的一個方法。

但是,函數和方法真正的不同點就在於設計和目的上,方法是用來對this對象進行操作的,而函數通常是獨立的並不需要this對象。

本來寫到這裡就不想再說啥了,不過,如果不把這個例子抄下來,難免真正需要的人就有些發暈,尤其當看我下一篇日誌的時候。。

所以,抄。

//定義建構函式 矩形,有倆屬性,寬和高

function Rectangle(w, h)
{
this.width = w;

this.height = h;
}

//定義一個方法,計算面積,這裡用了this哦

function compute_area()
{
return this.width * this.height;
}

//實力化對象rect

var rect = new Rectangle(3,4);

//通過給屬性賦值把函數 compute_area作為rect對象的一個屬性

rect.area = compute_area;

//如下內容調用新的方法獲得面積 結果為3 * 4

var are = rect.area();

上述代碼有個問題,就是我每次調用rect對象的方法前,總得將方法賦值給其的一個屬性。

那我新執行個體化的對象,比如rect2要想求得面積,還得這樣來上一遍。麻煩啊。

那如果我直接在建構函式裡面聲明呢?為所用執行個體化的對象都聲明一個方法,是不是可以解決問題?

NO,雖然你很聰明,因為

相關文章

聯繫我們

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