面向?qū)ο?br>
原則:開(kāi)發(fā)封閉
擴(kuò)展是可以的
修改時(shí)封閉的
//以前的代碼都可以用,加的東西不影響以前的
封裝 繼承 多態(tài)
封裝 將一系列相關(guān)的行為放到一起 能跑能叫 把這兩個(gè)相關(guān)的方法放到一起
繼承 為了提高重用性 你的 屬性我都有
多態(tài) 動(dòng)物的同一個(gè)方法say產(chǎn)生了不同的表現(xiàn)--叫聲
類 就是圖紙 實(shí)例就是把他放到計(jì)算機(jī)內(nèi)存里 新開(kāi)辟一段內(nèi)存
實(shí)例化的結(jié)果就是對(duì)象--實(shí)例
array.length function.length
元素 形參
java的面向?qū)ο?/p>
java使用類class來(lái)實(shí)現(xiàn)繼承
將一些屬性和方法封裝成淚
類可以繼承類 父類和子類
將類實(shí)例化 就有了對(duì)象
對(duì)象擁有類的屬性和方法 父類的屬性和方法 父類的父類...
多態(tài) 不同對(duì)象的同一個(gè)方法 有不同的表現(xiàn)
js的面向?qū)ο?/p>
js用原型鏈來(lái)實(shí)現(xiàn)繼承
標(biāo)識(shí)符 不能和保留字或者關(guān)鍵字重復(fù)
系統(tǒng)要用的名字 保留字
已經(jīng)有一些功能的保留字 關(guān)鍵字 var class 在es6中就變成了關(guān)鍵字
new 的時(shí)候js引擎做了什么
創(chuàng)建一個(gè)空對(duì)象作為this
this.proto指向構(gòu)造函數(shù)的prototype
運(yùn)行構(gòu)造函數(shù) //一般構(gòu)造函數(shù)里有this
如果沒(méi)有return 那么返回this
//console打出來(lái)的規(guī)則
當(dāng)你嘗試把一個(gè)對(duì)象打出來(lái)的時(shí)候
他會(huì)首先嘗試把他的構(gòu)造函數(shù)展示給你
展示的結(jié)果就是他的屬性了
var Foo=function(){
this.name="foo";
}
var foo= new Foo()
過(guò)程是
this={}
{}._proto_==> Foo.prototype
運(yùn)行Foo {}.name="foo"
返回this
這樣this也就是{} 就有了兩個(gè)屬性 name 和proto
如果有return的時(shí)候 要看return 是不是一個(gè)引用類型 如
var Foo =function(){
this.name="foo";
return {name:"returned"}
}
對(duì)于可以共用的屬性和方法 可以寫(xiě)到構(gòu)造函數(shù)的prototype里
this.prototype.say=function(){}
this.prototype.species="animal"
那這兩個(gè)語(yǔ)句 可不可以放到構(gòu)造函數(shù)里面呢 為什么放到外面 有什么好處
var Foo =function(){
this.name="foo";
this.say=function(){}
this.species="animal"
}
當(dāng)然 為了 節(jié)省內(nèi)存 可以把say的申明單獨(dú)放到外面
var animalSay=function(){}
var Foo =function(){
this.name="foo";
this.say=animalSay
this.species="animal"
}
// 主要是看你的意圖 這樣 實(shí)例的結(jié)構(gòu)會(huì)不同
var foo=new Foo();
foo.hasOwnProperty("say"); //true foo含有自己的屬性say
var Cat = function(){
Animal.apply(this, arguments)
this.tail = '一條尾巴'
}
// 下面三句話只是為了實(shí)現(xiàn) Cat.prototype.proto = Animal.prototype
var F = function(){};
F.prototype = Animal.prototype;
Cat.prototype = new F();
// 糾正一下 constructor
Cat.prototype.constructor = Cat;
Cat.prototype.run = function(){
console.log('貓兒在跑')
}
Cat.prototype.say = function(){
console.log('喵喵喵')
}
var cat = new Cat()
cat.say()
不用類 使用原型鏈 來(lái)實(shí)現(xiàn)繼承
//實(shí)現(xiàn)子對(duì)象繼承父對(duì)象
function extend(parent){
var F= function (){}
F.prototype=parent
return new F()
} //Object.create()// ie 不支持
var cat=extend(Animal);
cat.run=function(){
console.log("在跑");
}
cat.say=function(){
console.log("喵喵喵");
}