摘要:構造函數和原型同時存在同一方法,結果會是哪個呢構造函數的方法優先會先在構造函數中找,如果沒有在去查找原型,如果原型還沒有那返回原型和實例不是復制關系,而是協同關系,附加到了新創建的對象上未完待續
已經熟悉Javascript的開發者可能會認為原型和對象的關系很親密,但是這全都與函數有關,原型雖然是定義對象的一種很方便的方式,但是它的本質依然是函數特性。
作為Javascript中的一個方便方式,使用原型所定義的屬性會變成實例化對象的屬性,從而作為復雜對象創建的概覽。
所有函數在初始化的時候都有一個prototype屬性,該屬性的初始值是一個空對象,只有函數在作為構造器(constructor)的時候,prototype屬性才會返回更大的作用,使用new關鍵字調用一個函數,使得該函數可以作為構造器進行實例化,并產生一個新的空對象實例作為其上下文
上面看不懂沒關系下面我們就用幾個例子來理解一下原型
創建新對象最簡單的方法只有一條語句
var o = {};//并可以為他添加一些屬性 o.name = "Li li";//添加name屬性 o.age = "28"; //添加age屬性 o.skill = "english";//添加skill屬性 //也可以如下面這樣寫 var o { o.name = "Li li"; o.age = "28"; o.skill = "english"; }
上面我們演示了如何創建一個對象并為之添加三個屬性,那么如果我們要創建多個相同類型的對象實例,分別對屬性進行賦值,不僅代碼冗長,還非常容易出錯。此處下面在說
原型作為對象概覽我們先開看代碼
function Person () {} Person.prototype.dance = function () { return true } var person = new Person; console.log(person.dance())//true
讓我們看看發生了什么? 使用new操作符將其作為構造器進行調用,構造函數被調用,并且新創建了一個對象也就是他的實例,新創建的函數成了構造函數的上下文,new操作符返回的結果就是對新創建的對象的引用
實例屬性使用new操作符將函數作為構造器進行調用的時候,其上下文被定義新對象實例,意味著除了通過原型給附加屬性的形式意外,我們還可以在構造函數內通過this參數初始化值。
function Person () { this.swing = false;//false this.isSwing = function() {return !this.swing}//true Person.prototype .isSwing = function(){ return this.swing } var person = new Person; console.log(person.swing) //構造函數和原型同時存在同一方法,結果會是哪個呢?構造函數的方法優先!person會先在構造函數中找swing,如果沒有在去查找原型,如果原型還沒有那返回undifined 原型和實例不是復制關系,而是協同關系!,附加到了新創建的對象上
未完待續!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86741.html
摘要:首先,需要來理清一些基礎的計算機編程概念編程哲學與設計模式計算機編程理念源自于對現實抽象的哲學思考,面向對象編程是其一種思維方式,與它并駕齊驅的是另外兩種思路過程式和函數式編程。 JavaScript 中的原型機制一直以來都被眾多開發者(包括本人)低估甚至忽視了,這是因為絕大多數人沒有想要深刻理解這個機制的內涵,以及越來越多的開發者缺乏計算機編程相關的基礎知識。對于這樣的開發者來說 J...
摘要:是完全的面向對象語言,它們通過類的形式組織函數和變量,使之不能脫離對象存在。而在基于原型的面向對象方式中,對象則是依靠構造器利用原型構造出來的。 JavaScript 函數式腳本語言特性以及其看似隨意的編寫風格,導致長期以來人們對這一門語言的誤解,即認為 JavaScript 不是一門面向對象的語言,或者只是部分具備一些面向對象的特征。本文將回歸面向對象本意,從對語言感悟的角度闡述為什...
摘要:如下所示在規范中,已經正式把屬性添加到規范中也可以通過設置和獲取對象的原型對象對象之間的關系可以用下圖來表示但規范主要介紹了如何利用構造函數去構建原型關系。 前言 在軟件工程中,代碼重用的模式極為重要,因為他們可以顯著地減少軟件開發的成本。在那些主流的基于類的語言(比如Java,C++)中都是通過繼承(extend)來實現代碼復用,同時類繼承引入了一套類型規范。而JavaScript是...
摘要:而作為構造函數,需要有個屬性用來作為以該構造函數創造的實例的繼承。 歡迎來我的博客閱讀:「JavaScript 原型中的哲學思想」 記得當年初試前端的時候,學習JavaScript過程中,原型問題一直讓我疑惑許久,那時候捧著那本著名的紅皮書,看到有關原型的講解時,總是心存疑慮。 當在JavaScript世界中走過不少旅程之后,再次萌發起研究這部分知識的欲望,翻閱了不少書籍和資料,才搞懂...
摘要:原型對象是由創建的,因此原型對象的構造函數是構造函數也可以是稱為對象,原型對象也就繼承了其生父構造函數中的數據,也同時繼承了原型對象的數據。當然這條原型鏈中的數據,會被還是還是這類構造函數繼承,但是不會被這些繼承,他們不處于同一個鏈條上。 js中,Function的本質是什么?Object的本質又是什么?js中有幾條原型鏈? showImg(https://segmentfault.c...
閱讀 2976·2023-04-26 02:25
閱讀 2249·2023-04-25 18:05
閱讀 647·2021-09-30 09:57
閱讀 2943·2021-09-27 14:10
閱讀 1652·2019-08-30 15:44
閱讀 1003·2019-08-29 15:28
閱讀 2524·2019-08-29 14:10
閱讀 2263·2019-08-29 13:30