程序中面向?qū)ο蟮幕倔w現(xiàn)

在JavaScript中,所有的數(shù)據(jù)類(lèi)型都可以視為對(duì)象,當(dāng)然也可以自定義對(duì)象。自定義的對(duì)象數(shù)據(jù)類(lèi)型就是面向?qū)ο笾械念?lèi)的概念
假設(shè)我們要處理學(xué)生的成績(jī)表,為了表示一個(gè)學(xué)生的成績(jī),面向過(guò)程的程序可以用一個(gè)對(duì)象表示:
var stu1 = { name: "one", score: 98 }
var stu2 = { name: "two", score: 100 }

處理學(xué)生成績(jī)可以通過(guò)函數(shù)實(shí)現(xiàn),比如打印學(xué)生的成績(jī)

function printScore (students) {
  console.log("姓名" + student.name + ' ' + "成績(jī)" + student.score )
}

如果采用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,我們首先思考的不是程序的執(zhí)行流程,而是student這種數(shù)據(jù)類(lèi)型應(yīng)該被視為一個(gè)對(duì)象,這個(gè)對(duì)象擁有name和score這兩個(gè)屬性。如果要打印一個(gè)學(xué)生的成績(jī),首先必須創(chuàng)建出這個(gè)學(xué)生對(duì)應(yīng)的對(duì)象,然后給對(duì)象發(fā)一個(gè)printScore消息,讓對(duì)象自己把自己的數(shù)據(jù)打印出來(lái)

抽象數(shù)據(jù)行為模板(Class)

function Student (name, score) {
  this.name = name
  this.score = score
}

Student.prototype.printScore = function () {
  console.log('姓名:' + this.name + '  ' + '成績(jī):' + this.score)
}

實(shí)例對(duì)象具有自己的具體行為

std1.printScore() // => 姓名:one 成績(jī):98
std2.printScore() // => 姓名:two 成績(jī) 100

面向?qū)ο蟮脑O(shè)計(jì)思想是從自然界中來(lái)的,因?yàn)樵谧匀唤缰?,?lèi)和實(shí)例的概念是很自然的。class是一種抽象概念,比如我們定義的Class-Student,是指學(xué)生這個(gè)概念,而實(shí)例則是一個(gè)個(gè)具體的student,比如one和two是兩個(gè)具體的student。

所以,面向?qū)ο蟮脑O(shè)計(jì)思想是:

1. 抽象出Class

2. 根據(jù)Class創(chuàng)建實(shí)例

3. 根據(jù)實(shí)例得結(jié)果

面向?qū)ο蟮某橄蟪啥加直群瘮?shù)的高,因?yàn)橐粋€(gè)Class既包含數(shù)據(jù),又包含操作數(shù)據(jù)的方法