最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的類(Class)詳細介紹

 更新時間:2014年12月30日 08:41:48   投稿:junjie  
這篇文章主要介紹了JavaScript中的類(Class)詳細介紹,本文講解了JavaScript中類的定義、JavaScript中的Constructor(構造函數(shù))、類名等內容,需要的朋友可以參考下

在JavaScript中,可以使用類(Class)來實現(xiàn)面向對象編程(Object Oriented Programming)。不過,JavaScript中的類與Java中的有所不同,其相應的定義和使用也不一樣。

JavaScript中類的定義

在JavaScript中,所有從同一個原型對象(prototype)處衍生出來的對象組成了一個類;也就是說,JavaScript中的類是一個對象集合的概念,如果兩個對象它們的prototype相同,那么它們就屬于同一個類;JavaScript中的類甚至都不需要類名。以下面的代碼為例:

復制代碼 代碼如下:

var p = {x:42};
var a = Object.create(p);
var b = Object.create(p);
console.log(a === b);//false
console.log(Object.getPrototypeOf(a) === Object.getPrototypeOf(b));//true

在上述例子中,對象a和b擁有相同的原型對象(prototype) p,因此a和b屬于同一個類(雖然這個類都沒有類名),它們從原型對象p處繼承了值為42的屬性x。

從這個例子中可以看到,原型對象的作用就相當于模板,可以由之衍生/創(chuàng)建出多個對象,其地位與Java語言中的類代碼(Class code)相同,是JavaScript中類定義的核心。以下這個例子中的原型對象就呈現(xiàn)出更像類代碼的樣子:


復制代碼 代碼如下:

var p = {
 INCREMENT_BY : 1,
 increment : function(x){
  return x + this.INCREMENT_BY;
 }
}
var a = Object.create(p);
var b = Object.create(p);
console.log(a.increment(7));//8
console.log(b.increment(9));//10


上述例子中,原型對象p定義了一個值為1的property (INCREMENT_BY)和一個名為increment的函數(shù);對象a和b從p這個模板處獲取了INCREMENT_BY和increment函數(shù)。當調用對象a或b的increment函數(shù)時,JavaScript會試圖獲取a或b的INCREMENT_BY值(this.INCREMENT_BY);由于INCREMENT_BY是從p中獲取的,因此其值都是1 — 從模板中獲取的,值都相同的變量,類似于Java中的靜態(tài)類變量(static variable),因此上面的例子中對INCREMENT_BY變量命名時使用了全大寫字符。

在上面的例子中,所有從模板p處創(chuàng)建出來的對象(屬于同一個類的這些對象),其屬性和行為都是一模一樣的。但實際上對于同一個類的不同對象,它們除了擁有類所定義的屬性/行為以外,往往具有一些自身所特有的屬性與行為。因此,如果需要將prototype這個模板當作類來使用的話,就必須對每一個從中衍生出來的對象進行一定的定制:


復制代碼 代碼如下:

var p = {
 INCREMENT_BY : 1,
 increment : function(x){
  return x + this.INCREMENT_BY + this.custom_increment_by;
 }
}
var a = Object.create(p);
var b = Object.create(p);
a.custom_increment_by = 0;
b.custom_increment_by = 1;
console.log(a.increment(7));//8
console.log(b.increment(9));//11


在這個例子中,從模板p處創(chuàng)建出來的對象a和b擁有一個彼此間值不一定相等的變量custom_increment_by,而它們的increment()函數(shù)這個行為的最終結果則與custom_increment_by的值相關。一般來說,對新建對象進行定制化的工作往往放在統(tǒng)一的函數(shù)中進行:


復制代碼 代碼如下:

var p = {
 INCREMENT_BY : 1,
 increment : function(x){
  return x + this.INCREMENT_BY + this.custom_increment_by;
 }
}
function getIncrementalClassObject(customIncrementByValue){
 var incrementalObj = Object.create(p);
 incrementalObj.custom_increment_by = customIncrementByValue;
 return incrementalObj;
}
var a = getIncrementalClassObject(0);
var b = getIncrementalClassObject(1);
console.log(a.increment(7));//8
console.log(b.increment(9));//11


如此,便通過原型對象p和getIncrementalClassObject()函數(shù)完成了一個類的定義:可以通過調用getIncrementalClassObject()函數(shù)來獲取原型對象都是p的對象,而在調用getIncrementalClassObject()函數(shù)過程中可以對這些新建對象進行一定的定制化。值得注意的是,此時這個已經(jīng)定義了的類還沒有類名,為了方便描述,姑且稱之為Incremental。

回顧getIncrementalClassObject()函數(shù)中所做的工作,可以看到從Incremental這個類中創(chuàng)建新的對象所經(jīng)歷的過程如下:

1.創(chuàng)建一個空對象,并將其原型對象定義為p。
2.根據(jù)不同的參數(shù)值,對這個新建的空對象進行定制。
3.返回已經(jīng)定制完成的新對象。

在JavaScript中,可以通過使用Constructor(構造函數(shù))來快速地完成類的定義以及新對象的創(chuàng)建。

JavaScript中的Constructor(構造函數(shù))

從上述Incremental類這個例子中可以看到,定義新的類需要兩部分代碼:創(chuàng)建原型對象作為模板、創(chuàng)建自定義函數(shù)對新對象進行初始化;而從類中創(chuàng)建新的對象則經(jīng)歷了三個過程:指定新對象的原型對象、定制/初始化新對象、返回這個新對象。在JavaScript中,這一切都可以通過Constructor(構造函數(shù))來完成。

JavaScript中的Constructor是一個函數(shù)(function),承擔對新對象進行初始化的職責;而這個Constructor函數(shù)的prototype則作為模板用于創(chuàng)建新對象。仍以上述Incremental類為例,用Constructor來重寫代碼后是這樣的:


復制代碼 代碼如下:

function Incremental(customIncrementByValue){
  this.custom_increment_by = customIncrementByValue;
}
Incremental.prototype = {
  INCREMENT_BY : 1,
 increment : function(x){
  return x + this.INCREMENT_BY + this.custom_increment_by;
 }
}

var a = new Incremental(0);
var b = new Incremental(1);
console.log(a.increment(7));//8
console.log(b.increment(9));//11

通過new關鍵詞,使用Constructor函數(shù)來創(chuàng)建新對象這一過程,其實際上經(jīng)歷了以下幾個階段:

創(chuàng)建一個新的空對象。

1.將這個對象的原型對象指向constructor函數(shù)的prototype屬性。
2.將這個對象作為this參數(shù),執(zhí)行constructor函數(shù)。
3.這與之前的getIncrementalClassObject()函數(shù)中所做的工作是一樣的。

類名

在使用Constructor創(chuàng)建對象時,相應的對象也就有了“類名”,這可以從instanceof操作符的結果上得到驗證:

復制代碼 代碼如下:

console.log(a instanceof Incremental);//true
console.log(b instanceof Incremental);//true

不過,instanceof操作符并不判斷對象是否由Incremental這一構造函數(shù)所創(chuàng)建,instanceof操作符只判斷對象的原型對象是否為Incremental.prototype。當存在兩個prototype一樣的構造函數(shù)時,instanceof操作符將統(tǒng)一返回true,而不會區(qū)分用于創(chuàng)建對象的構造函數(shù)到底是哪個。
復制代碼 代碼如下:

function Incremental2(customIncrementByValue){
  this.custom_increment_by = customIncrementByValue + 3;
}
Incremental2.prototype = Incremental.prototype;
console.log(a instanceof Incremental2);//true

相關文章

  • JS判斷鼠標從什么方向進入一個容器實例說明

    JS判斷鼠標從什么方向進入一個容器實例說明

    偶然將想到的一個如何判斷鼠標從哪個方向進入一個容器的問題,并且做了一系列的設想,代碼部分不是很多,我直接寫了個示例, 感興趣的朋友可以了解下,或許本文對你有所幫助
    2013-02-02
  • 一文詳解如何跳出map或者foreach循環(huán)

    一文詳解如何跳出map或者foreach循環(huán)

    javascript中的遍歷方法有很多,今天主要總結一下這些遍歷方法如何跳出循環(huán),這篇文章主要給大家介紹了關于如何跳出map或者foreach循環(huán)的相關資料,需要的朋友可以參考下
    2023-11-11
  • 30個高逼格代碼的JavaScript高級單行代碼

    30個高逼格代碼的JavaScript高級單行代碼

    這篇文章中列出了一個系列的 30 個 JavaScript 單行代碼,它們在使用 vanilla js(≥ ES6)進行開發(fā)時非常有用,它們也是使用該語言在最新版本中為我們提供的所有功能來解決問題的優(yōu)雅方式,將它們分為以下5大類:日期、字符串、數(shù)字、數(shù)組、工具
    2023-08-08
  • js+canvas實現(xiàn)繪制正方形并插入文字效果(居中顯示)

    js+canvas實現(xiàn)繪制正方形并插入文字效果(居中顯示)

    canvas是一個可以讓我們使用腳本繪圖的標簽,它提供了一系列完整的屬性和方法,下面這篇文章主要給大家介紹了js+canvas實現(xiàn)繪制正方形并插入文字居中顯示效果的相關資料,需要的朋友可以參考下
    2023-11-11
  • JS中parseInt()和map()用法分析

    JS中parseInt()和map()用法分析

    這篇文章主要介紹了JS中parseInt()和map()用法,結合實例形式分析了parseInt()和map()方法的功能、參數(shù)、具體用法與相關注意事項,需要的朋友可以參考下
    2016-12-12
  • JS計算兩個時間相差分鐘數(shù)的方法示例

    JS計算兩個時間相差分鐘數(shù)的方法示例

    這篇文章主要介紹了JS計算兩個時間相差分鐘數(shù)的方法,結合完整實例形式分析了javascript針對日期時間的轉換與計算相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • JavaScript的9種繼承實現(xiàn)方式歸納

    JavaScript的9種繼承實現(xiàn)方式歸納

    這篇文章主要介紹了JavaScript的9種繼承實現(xiàn)方式歸納,本文講解了原型鏈繼承、原型繼承(非原型鏈)、臨時構造器繼承、屬性拷貝、對象間繼承等繼承方式,需要的朋友可以參考下
    2015-05-05
  • Bootstrap CSS組件之分頁(pagination)和翻頁(pager)

    Bootstrap CSS組件之分頁(pagination)和翻頁(pager)

    這篇文章主要介為大家詳細紹了Bootstrap CSS組件之分頁和翻頁的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • javascript實現(xiàn)查詢商品功能

    javascript實現(xiàn)查詢商品功能

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)查詢商品功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 值得分享和收藏的Bootstrap學習教程

    值得分享和收藏的Bootstrap學習教程

    這絕對是一套值得分享和大家收藏的Bootstrap學習教程,完整的知識體系,系統(tǒng)的學習資料,幫助大家開啟Bootstrap學習之旅,享受Bootstrap帶給大家的奇妙樂趣
    2016-05-05

最新評論

铜鼓县| 新竹县| 繁昌县| 伊金霍洛旗| 安国市| 丹棱县| 卢湾区| 大荔县| 永安市| 曲靖市| 阿城市| 岗巴县| 右玉县| 新干县| 承德县| 万荣县| 肥东县| 灵璧县| 易门县| 凤山市| 集安市| 阳山县| 阳朔县| 辰溪县| 鹤壁市| 晋江市| 桃江县| 中方县| 万年县| 阳信县| 建宁县| 高雄市| 永清县| 蒙自县| 南川市| 盖州市| 阿拉尔市| 鄂温| 丘北县| 二连浩特市| 平乐县|