1.對"封裝"的理解
封裝就是提高單一功能或模塊的獨(dú)立性和復(fù)用性前塔。
2.js中new一個對象時都發(fā)生了什么?
//定義一個構(gòu)造函數(shù)
function Bird(name,age){
this.name=name,
this.age=age
this.say=function(){
console.log('I am a bird')
}
}
//構(gòu)造函數(shù)的屬性和方法定義
Bird.prototype.color="red"
Bird.prototype.sayHi=function(){
console.log('hi')
}
//實(shí)例化
var a=new Bird('ying wu',2)
console.log(a.name) //當(dāng)前屬性
console.log(a.sayHi()) //原型方法
console.log(a.say()) //當(dāng)前方法
// a會自動包含一個constructor屬性指向他們的構(gòu)造函數(shù)
a.constructor==Bird()
//驗(yàn)證對象與實(shí)例對象之間的關(guān)系
console.log(a instanceof Bird) //true
每一個構(gòu)造函數(shù)都有一個prototype屬性承冰,指向另一個對象华弓。這個對象所有的屬性都會被構(gòu)造函數(shù)的實(shí)例繼承。這樣我們把那些不變的屬性和方法困乒,直接定義在prototype對象上寂屏。
3.isPrototypeOf() 和hasOwnProperty() in
isPrototypeOf() 這個方法用來判斷某個prototype對象和某個實(shí)例之間的關(guān)系
hasOwnProperty()判斷是否是本地屬性
Bird.prototype.isPrototypeOf(a) //true
in運(yùn)算符來判斷某個實(shí)例是否包含某個屬性,不管是不是本地;還可以遍歷
console.log(" name" in a) //true
for(var prop in a ){
console.log(prop)
}
實(shí)例化構(gòu)造函數(shù)娜搂,獲取對象迁霎。通過new關(guān)鍵字實(shí)例化的對象a,具備了構(gòu)造函數(shù)Bird中this的屬性:name百宇、age考廉,也具備了構(gòu)造函數(shù)Bird的原型prototype的屬性color和方法sayBye。
什么是構(gòu)造函數(shù)携御。就是一個普通函數(shù)但是內(nèi)部使用了this變量芝此。對構(gòu)造函數(shù)使用new運(yùn)算符,就能生成實(shí)例因痛,并且this變量會綁定在實(shí)例對象上婚苹。
精華在這里:比如,我有一只鸚鵡叫靚仔鸵膏。鸚鵡是鳥類(構(gòu)造函數(shù))的一個實(shí)例膊升,鸚鵡具備了鳥的屬性羽毛、行為飛翔谭企,然后鳥還可能有自己的名字靚仔和年齡1.5歲廓译。姓名和年齡是本地屬性(hasOwnProperty()),飛翔是他的原型方法。