對象、原型

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);

代碼預覽

4. 使用構造函數創建對象的方式實現 Tab 切換功能

代碼預覽

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容