1. 程式人生 > >JavaScript中__proto__與prototype的關係

JavaScript中__proto__與prototype的關係

一、所有構造器/函式的__proto__都指向Function.prototype,它是一個空函式(Empty function)

1 2 3 4 5 6 7 8 9 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

JavaScript中有內建(build-in)構造器/物件共計12個(

ES5中新加了JSON),這裡列舉了可訪問的8個構造器。剩下如Global不能直接訪問,Arguments僅在函式呼叫時由JS引擎建立,Math,JSON是以物件形式存在的,無需new。它們的__proto__是Object.prototype。如下

1 2 Math.__proto__ === Object.prototype  // true JSON.__proto__ === Object.prototype  // true

上面說的“所有構造器/函式”當然包括自定義的。如下

1 2 3 4 5 6 // 函式宣告 function Person() {} // 函式表示式 var Man = function() {} console.log(Person.__proto__ === Function.prototype) // true console.log(Man.__proto__ === Function.prototype)    // true

這說明什麼呢?

所有的構造器都來自於Function.prototype,甚至包括根構造器Object及Function自身。所有構造器都繼承了Function.prototype的屬性及方法。如length、call、apply、bind(ES5)。

Function.prototype也是唯一一個typeof XXX.prototype為 “function”的prototype。其它的構造器的prototype都是一個物件。如下

1 2 3 4 5 6 7 8 9 10 console.log(typeof Function.prototype) // function

相關推薦

js 的prototype 屬性和用法,外加__proto__ JavaScript__proto__prototype關係

var ob = { };//超級簡單的空物件 alert(JSON.stringify(ob.prototype));// undefined 能夠引用prototype的東西絕對是函式,絕對是函式,絕對是函式,prototype是屬於函式的一個屬性,prototype是屬於函式的一個屬性,prototy

JavaScript__proto__prototype關係

一、所有構造器/函式的__proto__都指向Function.prototype,它是一個空函式(Empty function) 1 2 3 4 5 6 7 8 9

Js__proto__prototype的區別和關係

在知乎上看到了一篇寫得還挺好的文章,能夠很好的說明這兩者之間的關係,之前一直也有關注這方面的知識,但是如果重新複習一遍的話,時間久了之後就會忘記,所以前端還是需要經常複習,經常使用,經常理解。 首先,要明確幾個點: 1.在JS裡,萬物都是物件,方法(Function)是物件

js__proto__prototype的區別和關係

正好這段時間在重新看這部分,寫一篇回答來梳理一下吧。 proto(隱式原型)與prototype(顯式原型) 1.是什麼顯式原型 explicit prototype property:每一個函式在建立之後都會擁有一個名為prototype的屬性,這個屬性指向函式的原型物件。

JavaScriptlabelbreak配合使用

出了 -m for循環 情況 let console bre pre code 語法 label: statement 說明 label語句可以在代碼中添加標簽,以便將來使用。定義的標簽可以在將來由break或continue語句引用。加標簽的語句一般都要與for語

__proto__ prototype

blog __proto__ 自己 不常用 又是 鏈表 事情 研究 是什麽 先來做個復習,ES5中有有幾種數據類型呢? 5種基本數據類型 Undefined Null Boolean Number String 1種復雜數據類型 Object 除了基本數據類

JavaScriptSetIntervalsetTimeout的用法詳解

sta 對象 show thead ansi out 計時 顯示 設計 在寫H5遊戲時經常需要使用定時刷新頁面實現動畫效果,比較常用即setTimeout()以及setInterval(),但是大家對SetInterval與setTimeout的用法了解嗎,下面通過

JavaScript陣列Array.prototype的常用的方法彙總

Array建構函式的API,我們可以通過控制檯列印Array.prototype可以知道有以下這些方法。這是Array的原型物件的所有方法,對陣列而言是可以繼承所有的這些方法的: 接下來,我們就以12個比較常見常用的API開始說起: 1. join() 將陣列轉化為字串,並且以某個

JavaScriptvarlet區別

新增連結描述 今日頭條:https://www.toutiao.com/i6535675554807415299/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&from=singlemessag

javascriptchildNodeschildren的區別

1、childNodes:獲取節點,不同瀏覽器表現不同;   IE:只獲取元素節點;   非IE:獲取元素節點與文字節點;   解決方案:if(childNode.nodeName=="#text") continue 或者 if(childNode.nodeType

linux之iptablesPREROUTINGPOSTROUTING關係

PREROUTING 和 POSTROUTING 的簡單關係 源地址傳送資料--> {PREROUTING-->路由規則-->POSTROUTING} -->目的地址接收到資料 當你使用:iptables -t nat -A PREROUTING -i eth1 -d 1

javascript(function(){})($)$(function)的區別

之前一直沒弄清楚這兩者的區別,只是發現多個(function(){})($)之間定義的方法是可以互通的,以為這個會比較好,實際運用中發現並不是這麼簡單的。 1. (function(){}())與(function(){})() 這兩種寫法,都是一種立即執

JavaScript call apply、bind 的使用

今天遇到一道關於call與apply使用的題目,在此總結一下關於 call 與 apply 的使用方法。 題目如下:以下程式執行結果為3的選項是? var a = {X:1,Y:2}; var b = { X:2, Y:2, add:function(){

JavaScript冒泡事件委託

冒泡 事件觸發後事件流的三個階段按順序依次是:     1、捕獲階段        2、目標階段        3、冒泡階段   大盒子包裹小盒子,兩個盒子都分別新增點選事件,當點選小盒子,兩個盒子的事件都會觸發。   事件委託 下

JavaScript冒泡事件委托

目標 var color ace 函數 prevent 阻止默認行為 tor 事件委托 冒泡 事件觸發後事件流的三個階段按順序依次是:     1、捕獲階段     2、目標階段     3、冒泡階段 大盒子包裹小盒子,兩個盒子都分別添加點擊事件,當點擊小盒

JavaScriptinnerHTMLinnerText,createTextNode的區別

innerHTML和innerText 它們都會把元素內內容替換掉,區別在於: innerHTML 會把替換內容裡的 HTML 標記解釋執行。 innerText 會把替換內容裡的 HTML 標記原樣輸出而不執行。 例如有如下程式碼: var content = "<b>這是對innerHT

JavaScriptapplycall的用法意義及區別

call和apply大概的用法差不多,簡單的看下例子: <input type="text" id="myText" value="input text"> <script> function Obj(){this.value="物件!"

深入理解javascript函式的prototype屬性(原型)

函式的prototype屬性 一、 只要我們建立一個函式,該函式就會自動獲得一個prototype屬性,這個屬性指向函式的原型物件。 建立fn函式自動獲得prototype屬性,該屬性是一個物件即該函式的原型物件,我們可以看到原型物件預設會有一個cons

JavascriptJSONString相與轉換

JSON字串: var str1 = ‘{ “name”: “cxh”, “sex”: “man” }’; //注意有單引號 JSON物件: var str2 = { “name”: “cxh”, “sex”: “man” }; 一、JSON字串轉換為

JavaScriptsetget方法用法

1、get與set是方法,因為是方法,所以可以進行判斷。 2、get是得到 一般是要返回的   set 是設定 不用返回 3、如果呼叫物件內部的屬性約定的命名方式是_age    然後就是幾個例子來