摘要:在討論構(gòu)造器和原型方法前,我可以看看一種叫做工廠方式的仿造方法。因此,出現(xiàn)了構(gòu)造函數(shù)方式,它的關(guān)鍵在于構(gòu)造器概念的引入。
類 Class
類的概念應(yīng)該是面向?qū)ο笳Z言的一個特色,但是JavaScript并不像Java,C++等高級語言那樣擁有正式的類,而是多數(shù)通過構(gòu)造器以及原型方式來仿造實現(xiàn)。在討論構(gòu)造器和原型方法前,我可以看看一種叫做“工廠方式”的仿造方法。
function start() { alert("Bang!!"); } function createCar(color, title) { var car = {}; car.color = color; car.title = title; car.start = start; return car; } var car1 = createCar("red", "BMW"); var car2 = createCar("yellow", "VOIS");
這種方式顯然可以實現(xiàn)class的功能,但是外形上怎么也無法說它是個class以及class實例的創(chuàng)建過程。因此,出現(xiàn)了“構(gòu)造函數(shù)方式”,它的關(guān)鍵在于構(gòu)造器(Constructor)概念的引入。
構(gòu)造器 Constructor
加粗文字
我們先來看“構(gòu)造函數(shù)方式”的具體做法:
function start(){ alert("Bang!!!"); } //constructor function Car(color, title){ this.color = color; this.title = title; this.start = start; } var car1 = new Car("red", "BMW"); var car2 = new Car("yellow", "VOIS");
這個看起來有點類的樣子了吧(先不提那個難看的外置function)?我們發(fā)現(xiàn),那個constructor其實就是一個簡單的function,它與“工廠方式”中的createCar()區(qū)別就在于:1、方法名大寫 2、沒有了空對象的創(chuàng)建和返回 3、使用this做引用。那原來的那個空對象的創(chuàng)建以及返回的步驟去哪了呢?這兩個步驟,現(xiàn)在都由創(chuàng)建實例時的“new”實現(xiàn)了?!皀ew”這個操作符負責(zé)創(chuàng)建一個空對象,然后將那個叫做構(gòu)造器的function添加到實例對象中并觸發(fā)它,這樣這個function實際上就是這個對象的一個method,function中的this指向的便是這個對象,最后將這個對象返回。根據(jù)如上分析,我們可以把這個過程簡單分解為如下代碼:
var obj = {}; obj.constructor = Car; obj.constructor("red", "BMW"); //”this“ refers to obj return obj;
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105706.html
摘要:寄生組合式繼承的繼承方式有多種主要有原型鏈繼承借用構(gòu)造函數(shù)組合式繼承寄生式繼承和寄生組合式繼承。中利用定義類,實現(xiàn)類的繼承子類里調(diào)用父類構(gòu)造函數(shù)實現(xiàn)實例屬性和方法的繼承子類原型繼承父類原型,實現(xiàn)原型對象上方法的繼承。 JavaScript中實現(xiàn)繼承 ??在JavaScript中實現(xiàn)繼承主要實現(xiàn)以下兩方面的屬性和方法的繼承,這兩方面相互互補,既有共享的屬性和方法,又有特有的屬性和方法。 ...
摘要:也就是說,不必在構(gòu)造函數(shù)中添加定義對象信息,而是可以直接將這些信息添加到原型中。子類的屬性,表示構(gòu)造函數(shù)的繼承,總是指向父類。以前,這些原生構(gòu)造函數(shù)是無法繼承的。 面向?qū)ο?js是一門基于對象的語言。js中的一切皆對象; console.log(Object.prototype.toString.call(123)) //[object Number] console....
摘要:防止類的構(gòu)造函數(shù)以普通函數(shù)的方式調(diào)用。這個函數(shù)的主要作用是通過給類添加方法,其中將靜態(tài)方法添加到構(gòu)造函數(shù)上,將非靜態(tài)的方法添加到構(gòu)造函數(shù)的原型對象上。 Class是ES6中新加入的繼承機制,實際是Javascript關(guān)于原型繼承機制的語法糖,本質(zhì)上是對原型繼承的封裝。本文將會討論:1、ES6 class的實現(xiàn)細2、相關(guān)Object API盤點3、Javascript中的繼承實現(xiàn)方案盤點...
摘要:眾所周知,是一門面向?qū)ο蟮恼Z言,如果說針對面向?qū)ο髞戆l(fā)問的話,我會想到兩個問題,在中,類與實例對象是如何創(chuàng)建的,類與實例對象又是如何實現(xiàn)繼承的。但是在中是指向的,因為每一個構(gòu)造函數(shù)其實都是這個對象構(gòu)造的,中子類的指向父類可以實現(xiàn)屬性的繼承。 眾所周知,Javascript是一門面向?qū)ο蟮恼Z言,如果說針對面向?qū)ο髞戆l(fā)問的話,我會想到兩個問題,在js中,類與實例對象是如何創(chuàng)建的,類與實例對...
摘要:如果不指定一個構(gòu)造函數(shù)方法則使用一個默認的構(gòu)造函數(shù)。一個類中出現(xiàn)多次構(gòu)造函數(shù)方法將會拋出一個錯誤。四關(guān)鍵字作為函數(shù)時,指向父類的構(gòu)造函數(shù)。五類的屬性和屬性作為構(gòu)造函數(shù)的語法糖,同時有屬性和屬性,因此同時存在兩條繼承鏈。 一、class的定義與基本用法 1.class的定義 ECMAScript 2015 中引入的 JavaScript 類實質(zhì)上是 JavaScript 現(xiàn)有的基于原型的...
閱讀 1883·2021-11-22 09:34
閱讀 3010·2021-09-28 09:35
閱讀 13375·2021-09-09 11:34
閱讀 3594·2019-08-29 16:25
閱讀 2820·2019-08-29 15:23
閱讀 2035·2019-08-28 17:55
閱讀 2424·2019-08-26 17:04
閱讀 3044·2019-08-26 12:21