在上一集解釋了工具力的來源
方函式:還記得之前提到的建構式模式嗎?
只要提供一個原型,就能大量產生的那個能力。其實,除了東西能複製,人也是可以的喔
function TopToolMan(task,remember){
this.task = task || {daily:["洗衣服","載男友"],weekily:["買當週消耗品"]};
this.remember = remember;
this.forbid = ["不可以色色","不可以妄想"]
this.log = function(){
console.log("不知為何要存在")
}
}
let x = new TopToolMan("採買","不需要");
我:你的內在(原型)看起來還挺壓抑的...
方函式:...那不是重點,重點是我所創造出來的人,若沒有特定要求(如下圖)
let doNothingClone = new TopToolMan();
還是會保有我的基本記憶與能力。這就是透過繼承來達成。
這樣子,今天不論她需要的是:
let goToTaipeiToBuyPhone = new TopToolMan("買手機","順便買伴手禮");
他記憶的任務跟會記得的就是你所交代(賦予) 的內容。
let x = new TopToolMan("採買","不需要");
方函式:同一個時間下,要幾個人就能有幾個人(實例),而且都能去處理不同的事情。
每個複製人內都一個的log
function,雖然是在做同一件事,但都會個別佔用了空間,所以可以視為不同的function
。
那要怎麼辦? 新增在原型上
function TopToolMan(task,remember){
this.task = task || {daily:["洗衣服","載男友"],weekily:["買當週消耗品"]};
this.remember = remember;
this.forbided = ["不可以色色","不可以妄想"]
topToolMan.prototype.log = function(){
console.log("不知為何要存在")
}
}
上面的行為是等於在原型上新增一個屬性或方法
這樣一來,所有TopToolMan
創建的instance,都能透過血繼限界中(prototype chain)取得這個能力與想法。
一切原理的起因,要說到JavaScript最初的設計由來:所謂物件導向的設計
以下會依序講述我目前所能理解的部分:
先知道:物件是最基本的程式單位。
原型的本身
還記得昨天的文章測試:原型鍊的頂部為Object.prototype
這件事嗎?
console.log(typeof Object.prototype); // "Object"
原型本身也是一個Object
,符合所謂的物件導向設計的:物件是最基本的程式單位。
Class
所以無法透過類的層級,來達成屬性、方法的繼承, 那JS怎麼做到繼承這件事呢? 你至少可以先知道new
扮演了什麼角色。
new
我們再來製作一個複製人,這次來看看:
實際上在創造每個複製人時,會依序執行以下的步驟
function TopToolMan(task,remember){
this.task = task || {daily:["洗衣服","載男友"],weekily:["買當週消耗品"]};
this.remember = remember;
this.forbided = ["不可以色色","不可以妄想"]
topToolMan.prototype.log = function(){
console.log("不知為何要存在")
}
}
let x = new topToolMan("採買","不需要");
object
,名稱為 x
x
的__proto__
會指向TopToolMan
的 prototype,才能繼承原型鍊。this
會指向x
,呼叫topToolMan
這個建構函式x
new
來實現new
這個動作時,實際上會讓物件與原型連結。-- to be continued --
那今天就到這邊摟!
每天的休息,是為了後面的追求,明天見。
你懂 JavaScript 嗎?#19 原型(Prototype)
[筆記] 了解JavaScript中原型(prototype)、原型鍊(prototype chain)和繼承(inheritance)的概念
該來理解 JavaScript 的原型鍊了