問題1: OOP 指什么?有哪些特性
OOP指的是面向對象編程。就是將事物抽象成對象。
面向對象的三個基本特征是:封裝、繼承、多態。
- 封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
- 繼承,它可以使用現有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進行擴展。
- 多態,允許將子類類型的指針賦值給父類類型的指針。實現多態,有二種方式,覆蓋,重載。
問題2: 如何通過構造函數的方式創建一個擁有屬性和方法的對象?
function Car(brand){
this.brand = brand;
this.start = function(){
console.log('gogogo');
}
}
問題3: prototype 是什么?有什么特性
js本身不提供一個class
的實現,js對象都有一個私有屬性(稱之為 [[Prototype]]),它持有一個連接到另一個稱為其 prototype 對象(原型對象)的鏈接。該 prototype 對象又具有一個自己的原型,層層向上直到一個對象的原型為 null。JavaScript 中幾乎所有的對象都是位于原型鏈頂端的Object的實例。
問題4:畫出如下代碼的原型圖
prototype
問題5: 創建一個 Car 對象,擁有屬性name、color、status;擁有方法run,stop,getStatus
function Car(name, color, status) {
this.name = name;
this.color = color;
this.status = status;
}
Car.prototype.run = function() {
console.log('run run run');
}
Car.prototype.stop = function() {
console.log('stop');
}
Car.prototype.getStatus = function() {
return this.status;
}
問題6: 創建一個 GoTop 對象,當 new 一個 GotTop 對象則會在頁面上創建一個回到頂部的元素,點擊頁面滾動到頂部。擁有以下屬性和方法
function goTop($ct, $target){
this.$ct = $ct;
this.$target = $target;
this.createNode();
this.bindEvent();
}
goTop.prototype = {
bindEvent: function(){
this.$target.on('click', function(e){
e.preventDefault();
$('html,body').animate({
scrollTop: 0
}, 700);
})
},
createNode: function(){
this.$ct.append(this.$target);
}
}
new goTop($('body'), $('<a href="#">top</a>'));