前端學習筆記之原型——一張圖說明`prototype`和`__proto__`的區別

全局變量

Global是是ECMAScript 中的全局對象(瀏覽器中是window),不屬於其餘對象的屬性和方法,全部在全局做用域中定義的屬性和方法,都是Global對象的屬性(window)。瀏覽器

window的屬性分爲兩類,一種是 ECMAScript 規定的,一種是瀏覽器私有的(各瀏覽器可能不同)。ECMAScript 規定的有parseIntparseFloatNumberStringObjectBoolean等,瀏覽器私有的alertconsolepromptconfirmdocument等。函數

var n = 1        //n是基本類型(number)
var n1 = new Number(1)        //n1是對象(object)

對象有toString()方法,好比n1.toString()
基本類型也能夠用toString()方法,它是經過在內存中建立一個臨時變量來獲取的,好比temp.toString(),在語句結束後這個變量就被回收了,因此:spa

var a = 1
a.xxx = 2        //語句結束後被回收,temp 在語句結束後將被回收
a.xxx   //undefined,再次訪問該屬性,值爲undefined

String 經常使用 API

trim()裁剪字符串兩邊的空格
concat()鏈接兩個字符串prototype

原型

__proto__prototype的區別:code

var s = new String()
//String.prototype 是 String 的公共屬性(原型)的引用
//s.__proto__ 是 String 的公有屬性(原型)的引用

NumberStringObjectBoolean的公有屬性都存儲在Object原型中。沒寫代碼的時,瀏覽器就默認有這條原型鏈指向Object原型,以下圖;當咱們建立了一個變量後,它就建立了在Heap 中建立了一個對象,指向這個對象自己的原型,不在指向prototype,以下圖紅線。對象

對象.__proto__ === 函數.prototype;

var __①__ = new __②__;
//① 類型:對象
//② 類型:函數

var Object = new Function();
//var 對象 = new 函數;

Object.__proto__ === Function.prototype;
//對象.__proto__ === 函數.prototype;

Function.__proto__ === Function.prototype;
//由於 Function 也是 Object
相關文章
相關標籤/搜索