1. OOP 指什么?有哪些特性?
OOP (Object Oriented Programming),面向對象程序設計,是種具有對象概念的程序編程范例,同時也是一種程序開發的方法。
面向對象的 3 個基本特征是:封裝、繼承、多態。
封裝,隱藏了某一方法的具體運行步驟,取而代之的是通過消息傳遞機制發送消息給它。
繼承,在某種情況下,一個類會有“子類”。子類比原來的類(稱為父類)要更加具體化。
多態,指由繼承而產生的相關的不同的類,其對象對同一消息會做出不同的響應。
2. 如何通過構造函數的方式創建一個擁有屬性和方法的對象?
代碼如下:
function Person(name) {
this.name = name;
this.sayName = function() {
console.log('My name is ' + this.name);
};
}
var p1 = new Person('LiLei');
p1.name; // LiLei
p1.sayName(); // My name is LiLei
3. prototype 是什么?有什么特性?
每個函數都有一個 prototype 屬性,指向原型對象。原型對象默認有 constructor
(指向函數自己) 和 __proto__
這兩個屬性。
所有通過構造函數 new
出來的對象的 __proto__
屬性都指向該構造函數的 prototype
屬性。
function Person(name) {
this.name = name;
this.say = function() {
console.log(this.name);
};
}
var p1 = new Person('LiLei');
p1.__proto__ === Person.prototype; // true
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('前端');
task35.jpg
5. 以下代碼中的變量age有什么區別?
function People (){
var age = 1; // age 為局部變量
this.age = 10; // 函數被調用時,age 為 this 指向對象的屬性
}
People.age = 20; // People 的屬性
People.prototype.age = 30; // People 原型對象的屬性
1. 創建一個 Car 對象,擁有屬性name、color、status;擁有方法run,stop,getStatus
function makeCar(name, color, status) {
this.name = name;
this.color = color;
this.status = status;
this.run = function() {
// ...
};
this.stop = function() {
// ...
};
this.getStatus = function() {
return this.status;
}
}
var car1 = new makeCar('Volvo', 'white', 'good');
2. 創建一個 GoTop 對象,當 new 一個 GotTop 對象則會在頁面上創建一個回到頂部的元素,點擊頁面滾動到頂部。擁有以下屬性和方法
- ct屬性,GoTop 對應的 DOM 元素的容器
- target屬性, GoTop 對應的 DOM 元素
- bindEvent 方法, 用于綁定事件
- createNode 方法, 用于在容器內創建節點
代碼預覽
3. 使用構造函數創建對象的方式完成輪播功能(查看demo),使用如下調用方式
function Carousel($node){
//todo...
}
Carousel.prototype = {
//todo ..
};
var $node1 = $('.ct').eq(0);
var $node2 = $('.ct').eq(1);
var carousel1 = new Carousel($node1);
var carousel2 = new Carousel($node2);