1.寫一個(gè)原型鏈繼承的例子
function Animail() { this.eat = function () { console.log('動(dòng)物吃東西') } }
function Dog () { this.bark = function () { console.log('wangwang') } }
Dog.prototype = new Animail()
Dog.prototype.constructor = Dog.constructor
var d = new Dog()
d.eat() //?動(dòng)物吃東西
2.獲取頁(yè)面元素顯示內(nèi)容綁定事件
function elem(id) { this.elem = document.getElementById(id) }
Elem.prototype.html = function (val) {
?var elem = this.elem
?if(val) {
?elem.innerHTML = val
?return this? // 鏈?zhǔn)讲僮?br>?} else {
?return elem.innerHTML
?}
?}Elem.prototype.on = function (type,fn){
?var elem = this.elem
?elem.addEventListener(type,fn)
?}var div1 = new Elem('tanke1');
console.log(div1.html())
div1.html('<div>click me</div>').on('click', ()=>{console.log(111111)})
3.new 一個(gè)對(duì)象的過(guò)程
1.創(chuàng)建一個(gè)新對(duì)象
2.this 指向這個(gè)新對(duì)象
3.執(zhí)行代碼,即對(duì) this 賦值
4.返回 this
new 的過(guò)程:
1.var f = new Foo('zhangsan',20)? 將參數(shù)傳進(jìn)去授霸,函數(shù)中的 this 會(huì)變成空對(duì)象
2.this.name = name;this.age = age;this.class = 'class-1' 為賦值据某;return this 為實(shí)際的運(yùn)行機(jī)制
3.return 之后賦值給 f 挪鹏,f 具備了 f.name = zhangsan栖博、f.age = 20悄泥、f.class = 'class-1'
4.繼續(xù)執(zhí)行到 f1 ,則 f1.name = lisi鼎文、f1.age = 22凡简、f1.class = 'class-1'
所有的引用類型(數(shù)組纱兑、對(duì)象呀闻、函數(shù)), _proto_ 屬性值(隱式原型屬性)指向它的構(gòu)造函數(shù)的“prototype”屬性值
for (item in obj) {
? ? if (obj.hasOwnProperty(item)) {
? ? ? ? //?通過(guò)則表明它是 f 自身的屬性萍启,未通過(guò)則表明 是 f 通過(guò)原型獲得的屬性 ? ?
}}
原型鏈
f.toString(),當(dāng)這個(gè)對(duì)象沒(méi)有這個(gè)屬性的時(shí)候总珠,去它自身的隱式原型中找,它自身的隱式原型就是它構(gòu)造函數(shù)(Foo)的顯式原型(Foo.prototype)但顯式原型(Foo.prototype)中并沒(méi)有 toString ;但顯式原型(Foo.prototype)也是對(duì)象勘纯,也要在它的隱式原型中找局服,即在其構(gòu)造函數(shù)?(Object?)的顯式原型中去找 toString.?故要在 f._proto_(隱式原型)的._proto_(隱式原型)中找,如圖所示驳遵,故輸出 null淫奔。