如何準確判斷乙個變數是不是陣列?
a instanceof array
手寫乙個簡易jquery,考慮外掛程式和擴充套件性
class
jquery
this
.length = length
this
.selector = selector
}get(index)
each
(fn)}on
(type, fn))}
// 擴充套件很多 dom api
}// 外掛程式
jquery.prototype.
dialog
=function
(info)
// 「造輪子」
class
myjquery
extends
jquery
// 擴充套件自己的方法
addclass
(classname)
style
(data)
}// const $p = new jquery('p')
// $p.get(1)
// $p.each((elem) => console.log(elem.nodename))
// $p.on('click', () => alert('clicked'))
class的原型本質,怎麼理解?
原型和原型鏈的圖示
屬性和方法的執行規則
// 類
class
student
sayhi()
,學號 $`
)// console.log(
//普通寫法
// '姓名 ' + this.name + ' ,學號 ' + this.number
// )
}// study()
}// 通過類 new 物件/例項
const xialuo =
newstudent
('夏洛'
,100
)console.
log(xialuo.name)
console.
log(xialuo.number)
xialuo.
sayhi()
const madongmei =
newstudent
('馬冬梅'
,101
)console.
log(madongmei.name)
console.
log(madongmei.number)
madongmei.
sayhi
()
extends
super
擴充套件或重寫方法
// 父類
class
people
eat(
)eat something`)}
}// 子類
class
student
extends
people
sayhi()
學號 $`)
}}// 子類
class
teacher
extends
people
teach()
教授 $`)
}}// 例項
const xialuo =
newstudent
('夏洛'
,100
)console.
log(xialuo.name)
console.
log(xialuo.number)
xialuo.
sayhi()
//類似 xialuo.__prototype__.sayhi.call(xialuo)
xialuo.
eat(
)// 例項
const wanglaoshi =
newteacher
('王老師'
,'語文'
)console.
log(wanglaoshi.name)
console.
log(wanglaoshi.major)
wanglaoshi.
teach()
wanglaoshi.
eat(
)
[
]instanceof
array
//true
instanceof
object
//true
instanceof
object
//true
object可以認為是所有class的父類
//class實際上是函式,可見是語法糖
typeof people //'function'
typeof student //'function'
//隱式原型和顯示原型
console.
log(xialuo.__proto__)
console.
log(student.prototype)
console.
log(xialuo.__proto__ === student.prototype)
//true
每個class都有顯示原型prototype
每個例項都有__proto__
指向對應 class 的 prototype
獲取屬性xialuo.name 或執行方法 xialuo.sayhi() 時
先在自身屬性和方法尋找
如果找不到則自動去__proto__
中查詢
一層一層的。
class 是 es6 語法規範,由ecma 委員會發布
ecma 只規定語法規則,即我們**的書寫規範,不規定如何實現
以上實現方式都是 v8引擎的實現方式,也是主流的。
js基礎 原型和原型鏈
原型是js中的乙個重要知識點,之前一直都原型一知半解,最近在做js的基礎梳理,感覺很有必要做一下關於原型和原型鏈的總結。一 普通物件和函式物件 了解原型,所有我們需要知道js中變數歸根到底是啥,可能大家都聽說過 萬物皆物件。但物件也會有一定區分,存在 普通物件 和 函式物件,區分規則 通過 new ...
原型 和 原型鏈
每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...
原型和原型鏈
原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...