JavaScript物件導向 實現多型

2021-09-24 10:29:54 字數 1588 閱讀 3757

這個是從乙個大佬的部落格學來的,看了看例子不太難,可能了解的不夠透徹。

大佬部落格位址

多型大佬例子:

function add() 

}// test

console.log(add())

console.log(add(7))

console.log(add(7, 9))

類的形式:

function add() 

function one(num)

function two(num1, num2)

this.add = function () }}

// test

var a = new add()

console.log(a.add())

console.log(a.add(7))

console.log(a.add(7, 9))

結果:

物件導向程式設計中的多型主要是通過抽象類和抽象函式實現的,js中也可以從這兩個方面實現多型。傳統意義上的多型,是通過派生類繼承並實現基類中的抽象(虛)函式來實現的,含有抽象函式的類是抽象類,抽象類是不能夠例項化的,同時,抽象函式沒有函式體,也不能夠直接呼叫,只能有派生類繼承並實現。在高階程式語言中,上述這些檢測均在程式編譯時進行,不符合要求的程式編譯將不通過,但是在js中,有了些許變化:

1. js是解釋性語言,不需要進行預編譯,所以js中抽象類和抽象函式的使用並沒有那麼嚴格的要求。

2. js中可以對未定義的方法進行呼叫,當然這一過程會報錯,而檢測時在執行呼叫時進行的。

所以,js中的抽象類可以定義例項,但就其意義而言,我們可以定義乙個空的沒有成員的類來代替,同樣,js中的抽象函式,我們可以不必在基類中宣告,直接進行呼叫,在派生類中實現即可,當然,也可以通過在基類中定義乙個空的抽象方法實現,**如下:

function classa() 

classa.prototype = ,

//定義乙個空的抽象方法由派生類去實現,也可以不定義

initial: function()

}//classa作為基類派生出classb

var classb = classa.extend(function(name) ,

},);

這樣的實現與真正意義上的多型相差有點大,可能會讓人疑惑這種必要性,為了最大程度的滿足嚴格意義上的多型,我們改寫上面的**如下:

//抽象類

function classa()

classa.prototype =

}//classa作為基類派生出classb

var classb = classa.extend(function(name) ,

},);

為了不讓抽象類例項化,我們直接在其建構函式中丟擲異常,為了不能直接呼叫抽象方法,我們也直接在其抽象方法中丟擲異常,這樣我們就滿足了抽象類/方法的嚴格要求。

JavaScript物件導向

方法一 建構函式法 function cat cat.prototype.showname function var cat new cat cat.name tom cat.showname tom 它用建構函式模擬 類 在其內部用this關鍵字指代例項物件。類的屬性和方法,還可以定義在建構函式的...

javaScript物件導向

code 類lecture構造器 使用兩個字串函式,name和teacher function lecture name,teacher 類lecture的方法,生成乙個顯示該課程資訊的字串 lecture.prototype.display function 類schedule的構造器 使用乙個l...

Javascript 物件導向

什麼是物件everything is object 萬物皆物件 物件到底是什麼,我們可以從兩次層次來理解。1 物件是單個事物的抽象。一本書 一輛汽車 乙個人都可以是物件,乙個資料庫 一張網頁 乙個與遠端伺服器的連線也可以是物件。當實物被抽象成物件,實物之間的關係就變成了物件之間的關係,從而就可以模擬...