關於 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
等於1
prototype
這指向物件的原型物件:所有其他物件都繼承自該物件。有關更多信息,請參閱原型繼承文章。
靜態方法
我們將方法分為靜態方法和實例方法。靜態方法直接在 Object
上調用。實例方法在物件實例(一個
物件)上調用。
靜態方法是提供位於同一空間中的函式的命名空間的絕佳方法。這樣,我們不需要全局函式,而是將所有函式都放在 Object
全局物件下的命名空間中。
Object.assign()
*ES2015
Object.create()
Object.defineProperties()
Object.defineProperty()
Object.entries()
*ES2017
Object.freeze()
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptors()
Object.getOwnPropertyNames()
Object.getOwnPropertySymbols()
Object.getPrototypeOf()
Object.is()
*ES2015
Object.isExtensible()
Object.isFrozen()
Object.isSealed()
Object.keys()
Object.preventExtensions()
Object.seal()
Object.setPrototypeOf()
*ES2015
Object.values()