關於建構函式,例項,原型物件一純手工的理解

2022-05-09 06:33:10 字數 3159 閱讀 7066

to do: 大學剛入門學前端的時候,一學姐和我說,你不需要去記住所有規則,但是你需要知道在遇到問題時哪個規則可用。確實,越往後走感覺很多東西模稜兩可,就好像小時候背單詞一樣,背了又忘。

囉嗦一大堆,進入正題吧(ps: 全程沒什麼基本概念性的陳述,只是一些我個人比較感興趣的東西的記錄)

首先來一張基本圖:

一開始就對這個_proto_比較感興趣,基本型別和引用型別的_proto_屬性如下:

關於基本型別

string:

var a = 'test'a._proto_ ===string.prototype

number:

var b = 1b._proto_ === number.prototype

boolean:

var c = true

c._proto_ === boolean.prototype

至於undefined 和 null 是沒有_proto_屬性的,不信你們自己試試,哈哈,我也是才發現,以前沒怎麼注意

關於引用型別

object:

array:

var arr ={}

arr._proto_ ===array.prototype

date:

var date = new

date()

date._proto_ ===date.prototype

regexp:

var exp = new

regexp()

exp._proto_ === regexp.prototype

然後來一波關於instanceof的理解(寫的順序是按自己所需來寫的,不能幫助到看這篇文章的請見諒,待我以後寫東西的水平提高了點,我再來重新修改)

instanceof,是用來檢測物件型別的

那麼它的原理是按照什麼樣的規則來檢測的

object()

寫了大致的規則後,就來個大統一吧:

關於基本型別

string: 

var a = '1'console.log(a

instanceof string) //

false

number:

var b = 1console.log(b

instanceof number) //

false

boolean:

var c = true

console.log(c

instanceof boolean) // false

undefined和null這兩種資料型別,instanceof檢測不出啥

前面三種我開始再控制台列印過(全部為true):

a._proto_ === string.prototype

b._proto_ === number.prototype

c._proto_ === boolean.prototype

問題來了,那麼為啥instanceof檢測出來為false了,我目前的理解是是瀏覽器自動轉換的,所以等式成立,這也是instanceof檢測基本資料型別根本沒啥意義的原因。

關於引用型別

object:

var a = new

object()

a._proto_ ===object.prototype

console.log(a

instanceof object) //

true

array(date, regexp規則同array):

var b = new

array()

b._proto_ ===array.prototype

console.log(b

instanceof array) //

true

b._proto_._proto_ ===object.prototype

console.log(b

instanceof object) //

true

關於原生建構函式

object:

object._proto_ ===function.prototype

console.log(object

instanceof function) //

true

object._proto_._proto_ ===object.prototype

console.log(object

instanceof object) //

true

function:

function._proto_ === function.prototype

console.log(function instanceof function) // true

function._proto_._proto_ === object.prototype

console.log(function instanceof object) // true

string:

string._proto_ ===function.prototype

console.log(string

instanceof function) //

true

string._proto_._proto_ ===object.prototype

console.log(string

instanceof object) //

true

其他原生建構函式同上string

自定義建構函式

function

fn() {};

var a = new

fn();

a._proto_ ===fn.prototype

console.log(a

instanceof fn) //

true

a._proto._proto_ ===object.prototype

console.log(a

instanceof object) //

true

建構函式,原型物件,

概念 如果函式中的邏輯生成乙個物件的並將其返回,我們就將其稱之為建構函式 回顧,普通函式,如下圖 一 建構函式嚴格意義就是用來生物件的 示例 用普通函式模擬的建構函式 二 建構函式是必須通過new這個關鍵字呼叫的 要改變this的指向 也稱為 例項化乙個物件 執行這個函式,生成乙個物件 它的作用就是...

建構函式 原型物件

物件都會有乙個屬性 proto 指向建構函式的prototype原型物件,之所以我們物件可以使用建構函式prototype原型物件的屬性和方法,就是因為物件有 proto 原型的存在 body p 建構函式 原型物件 p p 雖然構造物件上沒有sing方法,但是原型物件上有,因為 proto 的存在...

原型,建構函式,例項, proto

再說說 proto 這個孩子性格慢向,所以即使在現代瀏覽器廣為支援得今天也不建議使用,效能特別慢,而且影響所有來自該 prototype 的物件。只是拿出來了解了解 1.它是個啥?原型物件的屬性訪問器 object.prototype.proto 能夠暴露所有通過它訪問的物件的 prototype ...