亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Javascript 深入淺出原型

wpw / 2736人閱讀

摘要:重點實例對象是通過原型對象與構造函數(shù)取得聯(lián)系的。原型鏈的形成是真正是靠的,而不是。函數(shù)對象和原型對象通過和屬性進行相互關聯(lián)。

JavaScript 使用 prototypal 原型模型,雖然這經(jīng)常被當作缺點提及,但是只要善于運用,其實基于原型的繼承模型比傳統(tǒng)的類繼承還要強大。

個人博客排版更佳:https://haonancx.github.io/

先聊一聊對象的事情

JavaScript 中,萬物皆對象!但對象也是有區(qū)別的,主要分為普通對象(Object)和函數(shù)對象(Function)。

說好的只聊技術,怎么聊上個人問題了???

好了,安慰一下,請你吃下面 這道菜!

function example(){};
var example2 = function(){};
var example3 = new Function("str","console.log(str)");

var other = {};
var other2 =new Object();
var other3 = new example();

console.log(typeof other); //object 下面檢測一下他們都是些什么類型函數(shù)
console.log(typeof other2); //object
console.log(typeof other3); //object
console.log(typeof example); //function
console.log(typeof example2); //function
console.log(typeof example3); //function 

怎么區(qū)分普通對象和函數(shù)對象呢?!其實很簡單,凡是通過 new Function() 創(chuàng)建的對象都是函數(shù)對象,其他的都是普通對象;所以 other、other2、other3 為普通對象,而 example、example2、example3 為函數(shù)對象。

在 JavaScript 中,每當定義一個函數(shù)對象時候,對象中都會包含一些預定義的屬性(意思就是這個函數(shù)對象一旦被定義就必然會有這些屬性)。

其中函數(shù)對象的一個屬性就是原型對象 prototype;這個屬性會指向函數(shù)的原型對象。

默認情況下每個原型對象又都會獲取一個 constructor 屬性,這個屬性包含一個指向 prototype 屬性所在函數(shù)的指針。

普通對象沒有prototype,但有 _proto _屬性。
讓你現(xiàn)出"原型"

來來來,了解完對象,我們該開車上路了(老司機秒懂)

function Dogs(){
}
Dogs.prototype.name = "Collie";
Dogs.prototype.age = 3;
Dogs.prototype.DogsName = function(){
alert(this.name); 
};

var DogsA = new Dogs();
DogsA.DogsName();//"Collie"

上面的代碼中,創(chuàng)建了一個 Dogs 函數(shù),這時候它就會擁有一個 prototype 屬性,這個屬性指向了 Dogs Prototype 原型對象,而這個原型對象擁有一個 constructor (構造函數(shù)) 屬性,其指針指向了 Dogs,就是 prototype 屬性所在的函數(shù) Dogs;當你創(chuàng)建一個對象實例( DogsA,就是這條語句:var DogsA = new Dogs(); )的時候,同樣會擁有一個 prototype 屬性;這個 prototype 屬性會指向其原型對象,而不是直接指向其構造函數(shù) Dogs。

重點:實例對象是通過原型對象與構造函數(shù)取得聯(lián)系的。
原型鏈,老司機,深入一些!
JS 在創(chuàng)建對象(不論是普通對象還是函數(shù)對象)的時候,都有一個叫做 proto 的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對象的原型對象 prototype。

我們可以測試一下,以上面的代碼為例:

console.log(DogsA._proto_ === Dogs.prototype) //true

同樣,Dogs.prototype對象也有 _proto _ 屬性,它指向創(chuàng)建它的函數(shù)對象(Object)的 prototype

  console.log(Dogs.prototype._proto_ === Object.prototype) //true
你瞧,證明了你 DogsA 是我 Dogs 實例化出來的對象出來的。

好了繼續(xù),Object.prototype對象也有 _proto _屬性,但它比較特殊,為 NULL

  console.log(Object.prototype._proto_) //null

我們把這個有 proto 串起來,直到 Object.prototype.__proto_ _為 NULL 的鏈就叫做原型鏈。

總結

原型和原型鏈是 JS 實現(xiàn)繼承的一種模型。

原型鏈的形成是真正是靠 _proto _ 的,而不是 prototype。

所有的原型對象都有 constructor 屬性,該屬性對應創(chuàng)建所有指向該原型的實例構造函數(shù)。

函數(shù)對象和原型對象通過 prototype 和 constructor 屬性進行相互關聯(lián)。

該文章部分知識網(wǎng)絡整理

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/86600.html

相關文章

  • JavaScript深入之從原型原型

    摘要:深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構造函數(shù)的實例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。讓我們用一張圖表示構造函數(shù)和實例原型之間的關系在這張圖中我們用表示實例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構造函數(shù)的實例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。 構造函數(shù)創(chuàng)建對象 我們先...

    Songlcy 評論0 收藏0
  • JavaScript深入之new的模擬實現(xiàn)

    摘要:深入系列第十二篇,通過的模擬實現(xiàn),帶大家揭開使用獲得構造函數(shù)實例的真相一句話介紹運算符創(chuàng)建一個用戶定義的對象類型的實例或具有構造函數(shù)的內(nèi)置對象類型之一也許有點難懂,我們在模擬之前,先看看實現(xiàn)了哪些功能。 JavaScript深入系列第十二篇,通過new的模擬實現(xiàn),帶大家揭開使用new獲得構造函數(shù)實例的真相 new 一句話介紹 new: new 運算符創(chuàng)建一個用戶定義的對象類型的實例或具...

    tianlai 評論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點深入系列第十五篇,講解各種繼承方式和優(yōu)缺點。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評論0 收藏0
  • JavaScript深入之創(chuàng)建對象的多種方式以及優(yōu)缺點

    摘要:深入系列第十四篇,講解創(chuàng)建對象的各種方式,以及優(yōu)缺點。也就是說打著構造函數(shù)的幌子掛羊頭賣狗肉,你看創(chuàng)建的實例使用都無法指向構造函數(shù)這樣方法可以在特殊情況下使用。 JavaScript深入系列第十四篇,講解創(chuàng)建對象的各種方式,以及優(yōu)缺點。 寫在前面 這篇文章講解創(chuàng)建對象的各種方式,以及優(yōu)缺點。 但是注意: 這篇文章更像是筆記,因為《JavaScript高級程序設計》寫得真是太好了! 1....

    Terry_Tai 評論0 收藏0
  • 深入理解Javascript原型關系

    摘要:如下所示在規(guī)范中,已經(jīng)正式把屬性添加到規(guī)范中也可以通過設置和獲取對象的原型對象對象之間的關系可以用下圖來表示但規(guī)范主要介紹了如何利用構造函數(shù)去構建原型關系。 前言 在軟件工程中,代碼重用的模式極為重要,因為他們可以顯著地減少軟件開發(fā)的成本。在那些主流的基于類的語言(比如Java,C++)中都是通過繼承(extend)來實現(xiàn)代碼復用,同時類繼承引入了一套類型規(guī)范。而JavaScript是...

    ethernet 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<