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:然後來一波關於instanceof的理解(寫的順序是按自己所需來寫的,不能幫助到看這篇文章的請見諒,待我以後寫東西的水平提高了點,我再來重新修改)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,是用來檢測物件型別的
那麼它的原理是按照什麼樣的規則來檢測的
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
functionfn() {};
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 ...