成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JavaScript中__proto__與prototype的關(guān)系

justjavac / 1282人閱讀

摘要:了解中原型以及原型鏈只需要記住以下點即可對象都有屬性,指向構(gòu)造函數(shù)的構(gòu)造函數(shù)函數(shù)都有屬性,指向構(gòu)造函數(shù)的原型對象的內(nèi)置構(gòu)造函數(shù)可知所有的構(gòu)造函數(shù)都繼承于甚至包括根構(gòu)造器及自身。

了解JavaScript中原型以及原型鏈只需要記住以下2點即可

對象都有__proto__屬性,指向構(gòu)造函數(shù)的prototype

構(gòu)造函數(shù)函數(shù)都有prototype屬性,指向構(gòu)造函數(shù)的原型

1、對象的__proto__

內(nèi)置構(gòu)造函數(shù)

Number.__proto__ === Function.prototype  // true
Boolean.__proto__ === Function.prototype // true
String.__proto__ === Function.prototype  // true
Object.__proto__ === Function.prototype  // true
Function.__proto__ === Function.prototype // true
Array.__proto__ === Function.prototype   // true
RegExp.__proto__ === Function.prototype  // true
Error.__proto__ === Function.prototype   // true
Date.__proto__ === Function.prototype    // true

可知所有的構(gòu)造函數(shù)都繼承于Function.prototype , 甚至包括根構(gòu)造器Object及Function自身。所有構(gòu)造器都繼承了Function.prototype的屬性及方法,如length、call、apply、bind等。

既然所有的構(gòu)造器都來自于Function.prototype, 那么Function.prototype 是什么呢?

Object.prototype.toString.call(Function.prototype)

"[object Function]"

Function.prototype();
 //undefined

Function.prototype 是函數(shù),是不是很意外!!!

既然 Function.prototype 是函數(shù),那么它就是 Function 的實例,然而并不是這樣的!!!

Function.prototype.__proto__ === Function.prototype // false

Function.prototype.__proto__ === Object.prototype // true

如何理解 Function.prototype 不是 Function 實例的怪異行為呢?解決怪異行為的根本方法是讓它顯得不那么怪異,看下面代碼。

Object.prototype.toString.call(Number.prototype)
"[object Number]"

Number.prototype.__proto__ === Number.prototype // false
Number.prototype.__proto__ === Object.prototype // true

Object.prototype.toString.call(String.prototype)
"[object String]"

String.prototype.__proto__ === String.prototype // false
String.prototype.__proto__ === Object.prototype // true

Object.prototype.toString.call(Array.prototype)
"[object Array]"

Number.prototype.__proto__ === Array.prototype // false
Number.prototype.__proto__ === Object.prototype // true

簡單理解:內(nèi)置構(gòu)造函數(shù)的數(shù)據(jù)類型是對應(yīng)的構(gòu)造函數(shù),但不是其對應(yīng)構(gòu)造函數(shù)的實例,而是Object的實例。

2、函數(shù)的prototype

構(gòu)造函數(shù)函數(shù)都有prototype屬性,指向構(gòu)造函數(shù)函數(shù)的原型,原型有constructor屬性,指向構(gòu)造函數(shù)函數(shù)

構(gòu)造函數(shù)

Number.prototype.constructor === Number
// true

Function.prototype.constructor === Function
//true

Object.prototype.constructor === Object
true

普通函數(shù)

function wang(){};

wang.prototype.constructor === wang

//true
關(guān)系圖

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

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

相關(guān)文章

  • 講清楚之 javascript原形

    摘要:構(gòu)造函數(shù)和實例都通過屬性指向了原形。代碼示例是構(gòu)造函數(shù)的實例的屬性與的屬性保存的值相等,即他們指向同一個對象原形。 講清楚之javascript原型 標(biāo)簽: javascript javascript 中原形是一個比較難于理解的概念。javascript 權(quán)威指南在原形這一章也花了大量的篇幅進(jìn)行介紹,也許你已經(jīng)讀過javascript 權(quán)威指南,或者已經(jīng)是讀第N篇了,然而這篇文章的目...

    高勝山 評論0 收藏0
  • 深入學(xué)習(xí)js之——原型和原型鏈

    摘要:我們用一張圖表示構(gòu)造函數(shù)和實例原型之間的關(guān)系好了構(gòu)造函數(shù)和實例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們怎么表示實例與實例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計面向?qū)ο笙到y(tǒng)的時候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因為時間匆忙,它設(shè)計起來相對簡單,而是因為從一開始B...

    FingerLiu 評論0 收藏0
  • 深入學(xué)習(xí)js之——原型和原型鏈

    摘要:我們用一張圖表示構(gòu)造函數(shù)和實例原型之間的關(guān)系好了構(gòu)造函數(shù)和實例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們怎么表示實例與實例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計面向?qū)ο笙到y(tǒng)的時候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因為時間匆忙,它設(shè)計起來相對簡單,而是因為從一開始B...

    xialong 評論0 收藏0
  • JavaScript原型原型鏈

    摘要:每個原型對象都有一個屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)為了驗證這一說話,舉個例子。 本文共 1475 字,讀完只需 6 分鐘 一、概述 在 JavaScript 中,是一種面向?qū)ο蟮某绦蛟O(shè)計語言,但是 JS 本身是沒有 類 的概念,JS 是靠原型和原型鏈實現(xiàn)對象屬性的繼承。 在理解原型前,需要先知道對象的構(gòu)造函數(shù)是什么,構(gòu)造函數(shù)都有什么特點? 1. 構(gòu)造函數(shù) // 構(gòu)造函數(shù) Person() ...

    liaosilzu2007 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<