国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript之原型解析(上)

lushan / 1396人閱讀

摘要:前言原型這個概念在這門語言中是一個核心關(guān)鍵的知識點,但是你是否真的已經(jīng)完全理解透徹了呢可能我個人的理解能力較差,因此經(jīng)過多次翻閱書籍和實踐我才真正了解原型,所以記錄下來以加深理解,也以便日后深入探討。

前言

原型這個概念在JavaScript這門語言中是一個核心關(guān)鍵的知識點,但是你是否真的已經(jīng)完全理解透徹了呢?可能我個人的理解能力較差,因此經(jīng)過多次翻閱書籍和實踐我才真正了解原型,所以記錄下來以加深理解,也以便日后深入探討。如有不正確的地方,歡迎斧正!

原型涉及到的概念

__proto__/[[prototype]]

prototype

constructor

區(qū)分原型指針和原型屬性

注:首先要區(qū)分的是原型指針__proto__/[[prototype]]和原型屬性prototype,很多時候我們可能會把它們混為一談,但是兩者實際上不是同一種東西!!!

原型指針__proto__/[[prototype]]

先來看一個例子:

var obj = {};
function fn() {};
console.log(obj.__proto__ === Object.prototype); // true
console.log(obj.__proto__ === Object.getPrototypeOf(obj)); // true
console.log(fn.__proto__ === Function.prototype); // true
console.log(fn.__proto__ === Object.getPrototypeOf(Function)); // true

實際上,實例對象的原型指針[[prototype]]在某些宿主環(huán)境下是不能讀取到的;
但也有例外:
(1) 在瀏覽器環(huán)境下原型指針可以使用__proto__屬性讀取到
(2) ECMAScript 5版本增加的新方法Object.getPrototypeOf()可以進行讀取到

解釋:
每個對象在創(chuàng)建的時候都會有個原型指針的屬性指向負責構(gòu)造該對象的原型對象,以上面為例 ->
obj是由原型對象Object.prototype構(gòu)造的,等同于使用new Object構(gòu)造
fn是由原型對象Function.prototype構(gòu)造的,等同于使用new Function構(gòu)造

經(jīng)典的原型鏈圖示

?

謹記,往原型鏈向上追溯,最終都是由原型對象Object.prototype進行構(gòu)造!

原型屬性prototype

再來個栗子:

var obj = {};
function fn() {};
console.log(obj.prototype); // undefined
console.log(fn.prototype === Object.prototype); // false
console.log(fn.prototype === new fn().__proto__); // true
console.log(fn.prototype === Object.getPrototypeOf(new fn)); // true

解釋:
以前我一直混淆的概念就在這里,
為什么obj.prototype是undefined呢?
為什么fn.prototype指向的不是Object.prototype?
如果你跟我一樣有這樣的疑惑的話,說明你理解錯了原型指針__proto__/[[prototype]]和原型屬性prototype的概念!!!

/**
* 1. 如果你想得到構(gòu)造某對象的原型對象,你應(yīng)該讀取該對象的原型指針
* 2. 然而,讀取某對象的原型屬性prototype時,你的意圖應(yīng)該是想以該對象作為原型對象進行構(gòu)造實際對象
/
// 這就解析了為什么,實例對象new fn的原型指針__proto__指向了fn.prototype(fn的原型屬性)
// 另外,因為obj是普通對象,不可以使用new關(guān)鍵字進行構(gòu)造實例,因此自然也就沒有原型屬性了 -> undefined

如果還有疑惑,建議結(jié)合上面經(jīng)典的原型鏈圖示進行思考!

構(gòu)造器指針constructor

老規(guī)矩,上代碼

var obj = {};
function fn() {};
console.log(obj.constructor === Object); // true
console.log(fn.constructor === Function); // true
console.log(obj.hasOwnProperty("construnctor")); // false
console.log(fn.hasOwnProperty("construnctor")); // false

通過以上代碼,我們可以知道,其實objfn對象自身并沒有constructor這個屬性,實際上constructor構(gòu)造他們的原型對象上面的屬性,并且指向構(gòu)造對象本身!(once again,如果還有疑惑請建議結(jié)合上面經(jīng)典的原型鏈圖示進行思考!)

參考文獻

javascript高級程序設(shè)計(第三版)——[美]Nichilas C.Zakas 著

javascript權(quán)威指南(第6版)——David Flangan 著 淘寶前端團隊 譯

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89079.html

相關(guān)文章

  • 獨家解析Javascript原型繼承 - 函數(shù)原型和AOP

    摘要:引子獨家解析原型繼承已經(jīng)比較全面的分析了自定義函數(shù)類型,內(nèi)置基本類和內(nèi)置對象類型的的以及的原型鏈。鑒于函數(shù)是的一等公民,另辟新篇介紹函數(shù)的原型及其應(yīng)用。函數(shù)本身也是對象,它遵循獨家解析原型繼承所描述的自定義函數(shù)類型對象的原型法則。 引子 獨家解析Javascript原型繼承已經(jīng)比較全面的分析了自定義函數(shù)類型,JS內(nèi)置基本類(undefined, null, bool, number, ...

    ispring 評論0 收藏0
  • 進擊JavaScript(四)原型原型

    摘要:每一個由構(gòu)造函數(shù)創(chuàng)建的對象都會默認的連接到該神秘對象上。在構(gòu)造方法中也具有類似的功能,因此也稱其為類實例與對象實例一般是指某一個構(gòu)造函數(shù)創(chuàng)建出來的對象,我們稱為構(gòu)造函數(shù)的實例實例就是對象。表示該原型是與什么構(gòu)造函數(shù)聯(lián)系起來的。 本文您將看到以下內(nèi)容: 傳統(tǒng)構(gòu)造函數(shù)的問題 一些相關(guān)概念 認識原型 構(gòu)造、原型、實例三角結(jié)構(gòu)圖 對象的原型鏈 函數(shù)的構(gòu)造函數(shù)Function 一句話說明什么...

    XBaron 評論0 收藏0
  • 進擊JavaScript(一)變量聲明提升

    摘要:如下代碼輸出的結(jié)果是代碼執(zhí)行分為兩個大步預(yù)解析的過程代碼的執(zhí)行過程預(yù)解析與變量聲明提升程序在執(zhí)行過程中,會先將代碼讀取到內(nèi)存中檢查,會將所有的聲明在此進行標記,所謂的標記就是讓解析器知道有這個名字,后面在使用名字的時候不會出現(xiàn)未定義的錯誤。 showImg(https://segmentfault.com/img/remote/1460000012922850); 如下代碼輸出的結(jié)果是...

    LeexMuller 評論0 收藏0
  • 學習JavaScript原型

    原型鏈之前一直都不是很理解,這兩天把《你不知道的JavaScript》和《JavaScript高級程序設(shè)計》的原型鏈那章看完后有所理解,在這里先記下來,加深印象。 什么是原型對象 要講清楚什么是原型鏈需要從原型對象開始談,那么什么是原型對象呢?《JavaScript高級程序設(shè)計》中是這樣講的: 無論什么時候,只要創(chuàng)建了一個新函數(shù),就會根據(jù)一組特定的規(guī)則為該函數(shù)創(chuàng)建一個prototype屬性,這個屬...

    Leo_chen 評論0 收藏0
  • 前端面試JavaScript(總結(jié))

    1. JS基本的數(shù)據(jù)類型和引用類型 基本數(shù)據(jù)類型:number、string、null、undefined、boolean、symbol -- 棧 引用數(shù)據(jù)類型:object、array、function -- 堆 兩種數(shù)據(jù)類型存儲位置不同 原始數(shù)據(jù)類型是直接存儲在棧(stack)中的簡單數(shù)據(jù)段,占據(jù)空間小、大小固定,屬于被頻繁使用數(shù)據(jù); 引用數(shù)據(jù)類型存儲在堆(heap)中的對象,占據(jù)空間大、大...

    tomato 評論0 收藏0

發(fā)表評論

0條評論

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