Day27. 保安!可以讓人這樣改了又改,改了又改嗎?

Day27. 保安!可以讓人這樣改了又改,改了又改嗎?

本日閱讀進度:第12章 高階物件結構(536~553頁)

重點摘要:

1.將引數改寫成物件字面

假設在建構程序中有許多參數,會變得難以閱讀和維護。 這時可以將所有引數都放入一個物件字面,再把該字面傳遞給函式, 這樣就可以把值傳入一個容器(字面物件),而且不用擔心引數與參數的順序是否相同。 改寫範例如下:

var kitty = new Cat("Kitty", "white", 1, "mixed", "male"); // 原本長這樣

var kittyParams = {name: "Kitty",  // 可改寫成這樣
                   color: "white",
                   weight: 1,
                   breed: "mixed",
                   gender: "male"};

var kitty = new Cat(kittyParams); // 再將單一引數傳遞給Cat建構程序

function Cat(params) {   // 把Cat建構程序的5個參數代換成一個參數params,也就是我們要傳入的物件
  this.name = params.name;
  this.color = params.color;
  this.weight = params.weight;
  this.breed = params.breed;
  this.gender = params.gender;
}

2.如何檢查物件實體

之前介紹過typeof運算符,它會回傳其運算元的資料型別。 而要檢查一個實體是否由某個建構程序所建立,可以使用instanceof。 例如要檢查kitty是不是Cat建構所建立的物件:

// 接續上述程式碼
if (kitty instanceof Cat) { //如果是的話,instanceof會回傳true
  console.log("Yes, it's a Cat");
};
// "Yes, it's a Cat"

3.建構後可否修改?

即使是經建構的物件,也可以具有獨立的屬性。 例如上述的kitty,

kitty.owner = "Mickey"; // 添加新的屬性
delete kitty.weight;    // 使用delete移除一個屬性

甚至可以添加新的方法:

kitty.trust = function(person) {
                return (person === "Mickey");
              };

一個有趣的問題是,如果我們移除了kitty所有的屬性,它仍舊是Cat嗎?

instanceof會告訴你:是的。

讓物件大量發生的高階物件結構就介紹到這,鐵人賽終於快要倒數啦!

本文同步發表於iT邦幫忙

Recent post