關於 JavaScript 物件屬性和方法的一切
本篇文件記錄了所有 Object 內建物件的屬性和方法。
除了原始類型(字串、數字、布林值、符號、null 或 undefined)之外的任何值都是一個物件。即使是陣列或函式,在底層也都是物件。
可以使用物件字面語法來生成一個物件值:
const person = {}
typeof person // "object"
可以使用 Object 全局函式來生成物件值:
const person = Object()
typeof person // "object"
也可以使用 Object 建構函式來生成物件值:
const person = new Object()
typeof person // "object"
另一種語法是使用 Object.create():
const car = Object.create()
可以使用以下語法來初始化物件的屬性:
const person = {
age: 36,
name: 'Flavio',
speak: () => {
// 說話
}
}
const person = Object({
age: 36,
name: 'Flavio',
speak: () => {
// 說話
}
})
const person = new Object({
age: 36,
name: 'Flavio',
speak: () => {
// 說話
}
})
這些方式基本上是等價的,因為它們都可以讓您訪問我下面將列出的方法。
您也可以使用大寫字母開頭的函式前面的 new 關鍵字來初始化一個物件。這個函式作為該物件的構造函式。在其中,我們可以初始化接收到的參數,以設置物件的初始狀態:
function Car(brand, model) {
this.brand = brand
this.model = model
}
使用以下代碼初始化一個新物件:
const myCar = new Car('Ford', 'Fiesta')
myCar.brand // 'Ford'
myCar.model // 'Fiesta'
物件擁有屬性。每個屬性都有一個名稱和一個值。
您可能會認為物件基本上就是一個映射或字典數據結構,這是正確的。
屬性的值可以是任何類型,這意味著它甚至可以是另一個物件,因為物件可以嵌套其他物件。
當屬性值是函式時,我們稱之為方法。
物件可以從其他物件繼承屬性,我們將在談到繼承時詳細介紹這一點。
物件始終以引用的方式傳遞。
如果您將一個變量賦予另一個變量相同的值,如果它是一個原始類型,比如數字或字串,則它們以值的方式傳遞:
let age = 36
let myAge = age
myAge = 37
age // 36
const car = {
color: 'blue'
}
const anotherCar = car
anotherCar.color = 'yellow'
car.color // 'yellow'
內建物件屬性
物件物件有 2 個屬性:
length等於1prototype這指向物件的原型物件:所有其他物件都繼承自該物件。有關更多信息,請參閱原型繼承文章。
靜態方法
我們將方法分為靜態方法和實例方法。靜態方法直接在 Object 上調用。實例方法在物件實例(一個物件)上調用。
靜態方法是提供位於同一空間中的函式的命名空間的絕佳方法。這樣,我們不需要全局函式,而是將所有函式都放在 Object 全局物件下的命名空間中。
Object.assign()*ES2015Object.create()Object.defineProperties()Object.defineProperty()Object.entries()*ES2017Object.freeze()Object.getOwnPropertyDescriptor()Object.getOwnPropertyDescriptors()Object.getOwnPropertyNames()Object.getOwnPropertySymbols()Object.getPrototypeOf()Object.is()*ES2015Object.isExtensible()Object.isFrozen()Object.isSealed()Object.keys()Object.preventExtensions()Object.seal()Object.setPrototypeOf()*ES2015Object.values()