每個 JavaScript 物件都有 properties 以及 method,屬於物件的 function 被稱為method
function 是指自訂函數,method 是屬於某物件的 function (例如:array 的 push)
物件的屬性與相對應的值是一種 key-value pair(某個 key 可以對上某個值),想要獲取物件屬性的方式可以透過 .notation
或是 []
let Phoebe = {
// 製作新物件,可以設定屬性properties(key-value pair), 行為methods
// 屬性properties
first_name: "Phoebe",
last_name: "Lee",
age: 23,
// 行為methods
sayHi() {
console.log("Phoebe says hi.");
},
// 可以有多個methods
walk() {
console.log("Phoebe is walking.");
},
// 要加入參數
speak(words) {
console.log("Phoebe says" + words);
},
};
// 執行properties
// 方法1
console.log(Phoebe.first_name);
// 方法2
console.log(Phoebe["first_name"]);
// 執行methods
Phoebe.sayHi();
Phoebe.walk();
Phoebe.speak("今天心情不錯");
JavaScript Object 是一種雜湊表 hashtable,物件的獲取都是 O(1)
在 method 中的 this 關鍵字指的是調用該方法 method 的物件,用this的好處是當值改變,不需要一一到 method 去修改
let Phoebe = {
first_name: "Phoebe",
last_name: "Lee",
age: 23,
sayHi() {
console.log(this.first_name + " says hi."); // this指向Phoebe這個物件
},
}
Phoebe.sayHi(); // -> Phoebe says hi.
!!function沒有調用該function的物件,則this
是指向window物件
function hello() {
console.log("hello");
console.log(this); // -> 指向window object (glogal object)
}
hello();
// 純function,不是method
// -> hello
// -> Window {window: Window, self: Window, document: document, name: '', location: Location, …}
在 JavaScript 當中的function
、array
其實都是Object
array
、function
都是special type of objects,雖然這樣說,但由以下的程式碼可看出,array
的型態是object,function
的型態卻是function(是JavaScript的一個bug)
let arr = [1, 2, 3, 4, 5];
console.log(typeof arr); // -> object
function hello() {
console.log("hello world");
}
console.log(typeof hello); // -> function
console.log(typeof hello()); // -> 不能加(),不然會變成執行後的typeof
要如何確認array
型態呢?
true
if value is an Array; otherwise, false
let arr = [1, 2, 3, 4, 5];
console.log(Array.isArray(arr)); // -> true
下一篇文章來學習迴圈for、while、do while。