JS創(chuàng)建類和對(duì)象的兩種不同方式
在JavaScript中, 當(dāng)你定義了一個(gè)新的函數(shù), 你實(shí)際上聲明了一個(gè)新的類, 而這個(gè)函數(shù)本身就相當(dāng)于類的構(gòu)造函數(shù)。下面的代碼向你展示了兩種不同的方式來(lái)創(chuàng)建一個(gè)新的Person類, 而Person.prototype的定義也緊跟在函數(shù)定義之后。
var Person = function(name) { // 一個(gè)匿名函數(shù), 并將這個(gè)函數(shù)賦值給一個(gè)Person變量, 此時(shí)Person成為一個(gè)類
this.name = name;
}
function Person(name) { // 直接定義一個(gè)叫做Person的函數(shù)表示Person類
this.name = name;
}
Person.prototype = { // 定義Person的prototype域
printName: function() { // 定義一個(gè)print函數(shù)
alert(this.name);
}
}
當(dāng)你通過(guò)函數(shù)的方式聲明了一個(gè)類之后, 你就可以通過(guò)new操作符來(lái)實(shí)例化這個(gè)類。這樣, 你就可以調(diào)用類的成員函數(shù)來(lái)完成你的邏輯。
var person = new Person("Joe Smith"); // 使用new操作符來(lái)新建一個(gè)Person的實(shí)例, 并賦給變量person
person.printName(); // person就可以看作是一個(gè)實(shí)例的引用(reference), 所以可以通過(guò)這個(gè)引用來(lái)調(diào)用Person類中的成員函數(shù)
我們來(lái)總結(jié)一下創(chuàng)建一個(gè)新的類的實(shí)例的整個(gè)流程和步驟:
1. 通過(guò)定義一個(gè)函數(shù)的方式(匿名或者實(shí)名)來(lái)聲明一個(gè)新的類.
2. 如果有必要, 定義這個(gè)新的類的prototype域.
3. 使用new操作符緊跟你所定義的函數(shù)來(lái)創(chuàng)建一個(gè)新的類的實(shí)例. 一旦JavaScript編譯器碰到了new操作符, 它實(shí)際上創(chuàng)建了一個(gè)空的類實(shí)例變量.
4. 將所有這個(gè)類的prototype域中的屬性與方法復(fù)制到這個(gè)新的實(shí)例中, 并將其成員函數(shù)中所有的this指針指向這個(gè)新創(chuàng)建的實(shí)例.
5. 接下來(lái), 執(zhí)行緊跟在new操作符后面的那個(gè)函數(shù).
6. 當(dāng)你執(zhí)行這個(gè)函數(shù)時(shí), 如果你試圖對(duì)一個(gè)不存在的屬性進(jìn)行賦值, JavaScript編譯器將自動(dòng)為你在這個(gè)實(shí)例范圍內(nèi)新創(chuàng)建這個(gè)屬性.
7. 函數(shù)執(zhí)行完畢后, 將這個(gè)初始化完成的實(shí)例返回.
在Prototype中, 使用Class對(duì)象, 你可以以一個(gè)比較簡(jiǎn)單的方式來(lái)聲明一個(gè)新的對(duì)象。通過(guò)使用Class.create(), prototype為你創(chuàng)建了一個(gè)默認(rèn)的構(gòu)造函數(shù)initialize(), 一旦你實(shí)現(xiàn)這一函數(shù), 就可以以一個(gè)類似Java中構(gòu)造函數(shù)的方式來(lái)創(chuàng)建一個(gè)新的類的實(shí)例。
- 跟我學(xué)習(xí)javascript創(chuàng)建對(duì)象(類)的8種方法
- JavaScript 創(chuàng)建對(duì)象和構(gòu)造類實(shí)現(xiàn)代碼
- JavaScript 常見(jiàn)對(duì)象類創(chuàng)建代碼與優(yōu)缺點(diǎn)分析
- JS OOP包機(jī)制,類創(chuàng)建的方法定義
- JavaScript創(chuàng)建類/對(duì)象的幾種方式概述及實(shí)例
- 創(chuàng)建js對(duì)象和js類的方法匯總
- Javascript創(chuàng)建類和對(duì)象詳解
- JavaScript構(gòu)造函數(shù)詳解
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動(dòng)態(tài)原型模式)
- JS中的構(gòu)造函數(shù)詳細(xì)解析
- 深入理解javascript構(gòu)造函數(shù)和原型對(duì)象
- JavaScript 面向?qū)ο蟪绦蛟O(shè)計(jì)詳解【類的創(chuàng)建、實(shí)例對(duì)象、構(gòu)造函數(shù)、原型等】
相關(guān)文章
JavaScript語(yǔ)言對(duì)Unicode字符集的支持詳解
這篇文章主要介紹了JavaScript語(yǔ)言對(duì)Unicode字符集的支持詳解,需要的朋友可以參考下2014-12-12
輕松學(xué)習(xí)JavaScript函數(shù)中的 Rest 參數(shù)
ES6 引入 rest 參數(shù)用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對(duì)象了。rest 參數(shù)搭配的變量是一個(gè)數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。下面我們來(lái)詳細(xì)了解一下吧2019-05-05
用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享
用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享,思路比較簡(jiǎn)單,但很實(shí)用2011-08-08
用meta實(shí)現(xiàn)的頁(yè)面跳轉(zhuǎn)代碼
用meta實(shí)現(xiàn)的頁(yè)面跳轉(zhuǎn)代碼,建議與js一起使用,防止頁(yè)面假死或不支持js的情況,都可以實(shí)現(xiàn)效果。2007-09-09
JavaScript 學(xué)習(xí)筆記 Black.Caffeine 09.11.28
這兩天終于寫出了一個(gè)個(gè)人認(rèn)為真正意義上的作業(yè)了,不過(guò),最大感受就是。。。IE太垃圾了。。。so,這個(gè)作業(yè)實(shí)際上也沒(méi)有完成的很完美,因?yàn)?,在IE上還是有兼容性的問(wèn)題存在,不錯(cuò),就此先自我總結(jié)一下吧~免得以后又忘了~2009-11-11
JavaScript中Cookies的相關(guān)使用教程
這篇文章主要介紹了JavaScript中Cookies的相關(guān)使用教程,包括Cookies的存儲(chǔ)和刪除等操作方法,需要的朋友可以參考下2015-06-06
使用Math.floor與Math.random取隨機(jī)整數(shù)的方法詳解
本篇文章對(duì)使用Math.floor與Math.random取隨機(jī)整數(shù)的方法進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05
JavaScript中的setMilliseconds()方法使用詳解
這篇文章主要介紹了JavaScript中的setMilliseconds()方法使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06

