1.OOP 指什么?有哪些特性?
- oop-- Object-oriented programming的縮寫脑奠,面向?qū)ο蟪绦虻脑O(shè)計。是一種程序設(shè)計的思想幅慌。即一切事物都是對象宋欺,把所有對象共同特征抽象化就是類,類實例化就是對象胰伍,添加新特性就是對象齿诞。
比如:小明——人——動物——生物——物質(zhì)....
小明是人的實例。 人是動物的實例骂租,同時他還包含小明這一類祷杈。這樣一直可以溯本追源。每個類菩咨,其實也是對象吠式,直到終點。
面向?qū)ο蟮乃枷氤槊祝矣X得應(yīng)該就是我們在設(shè)計程序的時候,由上而下的設(shè)計糙置,就是盡可能先創(chuàng)造出物質(zhì)這個東西云茸,然后再實例化,創(chuàng)造生物谤饭,再創(chuàng)造動物标捺,這樣,感覺我們再使用的時候揉抵,代碼就有很大復(fù)用性亡容,我們下次再創(chuàng)造小紅的時候不要簡單太多,只要加新特性就可以了冤今。假如我們一不小心創(chuàng)造了一個邪惡的小紅闺兢,直接刪除她,也不用太傷心戏罢,因為再創(chuàng)造一個小紅也很輕松屋谭。
特性:
1.繼承:小明繼承人的一些屬性和方法脚囊。
2.封裝:使用小明的人不需要知道小明是怎么跑和跳的,只需要知道小明能跑能跳就行了桐磁。
3.多態(tài):想讓小明天生是個運動員悔耘,我們只需要讓小明跑和跳的方式和普通大眾不一樣就可以了。
原則:開放封閉我擂。
擴展開放:為了增強代碼的功能性衬以,你可以隨意擴展功能,只要你厲害校摩,完全可以寫出更簡單的代碼實現(xiàn)更多的功能看峻。
修改封閉:但是為了避免你瞎比操作,導(dǎo)致源碼喪失基本功能秧耗,不能讓你瞎比改备籽。
2: 如何通過構(gòu)造函數(shù)的方式創(chuàng)建一個擁有屬性和方法的對象?
function Cat(name){
this.name=name
this.sayname=function(){
console.log('hello,'+this.name)
}
}
var cat1=new Cat('miao')
console.log(cat1.name)
console.log(cat1.sayname())
3.prototype 是什么?有什么特性
prototype 是構(gòu)造函數(shù)的一個默認添加的屬性分井,是一個對象车猬。
- 所有實例的
_proto_
都可以通過原型鏈訪問到prototype。 - prototype相當(dāng)于特定類型所有實例都可以訪問到的一個公共容器
- prototype里面有兩個默認屬性尺锚,一個constructor,還有一個proto指向類的prototype
4.畫出如下代碼的原型圖
function People (name){
this.name = name;
this.sayName = function(){
console.log('my name is:' + this.name);
}
}
People.prototype.walk = function(){
console.log(this.name + ' is walking');
}
var p1 = new People('饑人谷');
var p2 = new People('前端');
自己畫的
5. 創(chuàng)建一個 Car 對象珠闰,擁有屬性name、color瘫辩、status伏嗜;擁有方法run,stop伐厌,getStatus
function Car(){
this.name='auto'
this.color='blue'
this.status='run'
this.run=function(){
console.log(this.name)
}
this.stop=function(){
console.log('never')
}
this.getStatus=function(){
console.log(this.status)
}
}
6.創(chuàng)建一個 GoTop 對象承绸,當(dāng) new 一個 GotTop 對象則會在頁面上創(chuàng)建一個回到頂部的元素,點擊頁面滾動到頂部挣轨。擁有以下屬性和方法
function GoTop($ct,$target){
this.$ct=$ct
this.taget=$target
this.bindEvent()
}
GoTop.prototype={
bindEvent:function(){
var that=this
this.creatnode().on('click',function(){
$(window).scrollTop()=that.target.offset().top
})
},
creatnode:function(){
var $node=$('<div class=gotop>gotop</div>')
this.$ct.append($node)
return $node
}
}
var go=new GoTop($('.ct'),$('.ct'))