在 JavaScript 中,對象可以包含屬性和方法岂贩。下面是定義對象方法的常用方式:
- 對象字面量
使用對象字面量定義對象時,可以將方法定義為對象的屬性巷波,值為一個函數(shù)表達式萎津。
const person = {
name: 'Alice',
age: 30,
sayHello: function() {
console.log(`Hello, my name is ${this.name}.`);
}
};
person.sayHello(); // output: Hello, my name is Alice.
- 屬性初始化器
使用屬性初始化器來定義對象時,方法也可以定義為對象的屬性抹镊。這種方式的語法更簡潔锉屈。
const person = {
name: 'Bob',
age: 25,
sayHello() {
console.log(`Hello, my name is ${this.name}.`);
}
};
person.sayHello(); // output: Hello, my name is Bob.
- 構(gòu)造函數(shù)
在構(gòu)造函數(shù)中定義對象時,可以使用 this
關(guān)鍵字來定義對象的方法垮耳。
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log(`Hello, my name is ${this.name}.`);
};
}
const person = new Person('Charlie', 20);
person.sayHello(); // output: Hello, my name is Charlie.
- 原型
通過原型也可以定義對象的方法颈渊,這種方式可以在多個實例之間共享方法,節(jié)省內(nèi)存空間氨菇。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}.`);
};
const person1 = new Person('David', 35);
const person2 = new Person('Emma', 40);
person1.sayHello(); // output: Hello, my name is David.
person2.sayHello(); // output: Hello, my name is Emma.
是的儡炼,還有一些常用的對象方法:
- call
call()
方法用于調(diào)用一個函數(shù),并將一個指定的對象綁定到函數(shù)執(zhí)行時的 this
關(guān)鍵字上查蓉。
const person = {
name: 'Alice',
age: 30,
sayHello(phrase) {
console.log(`${phrase}, my name is ${this.name}.`);
}
};
const anotherPerson = {
name: 'Bob',
age: 25
};
person.sayHello.call(anotherPerson, 'Hi'); // output: Hi, my name is Bob.
- apply
apply()
方法用于調(diào)用一個函數(shù)乌询,并將一個指定的對象綁定到函數(shù)執(zhí)行時的 this
關(guān)鍵字上,與 call
方法不同的是豌研,該方法接收一個數(shù)組作為函數(shù)參數(shù)妹田。
const person = {
name: 'Alice',
age: 30,
sayHello(phrase) {
console.log(`${phrase}, my name is ${this.name}.`);
}
};
const anotherPerson = {
name: 'Bob',
age: 25
};
person.sayHello.apply(anotherPerson, ['Hi']); // output: Hi, my name is Bob.
- bind
bind()
方法用于創(chuàng)建一個新函數(shù)唬党,并將一個指定的對象綁定到函數(shù)執(zhí)行時的 this
關(guān)鍵字上,該方法不會立即調(diào)用函數(shù)鬼佣,而是返回一個新的函數(shù)對象驶拱。
const person = {
name: 'Alice',
age: 30,
sayHello(phrase) {
console.log(`${phrase}, my name is ${this.name}.`);
}
};
const anotherPerson = {
name: 'Bob',
age: 25
};
const greet = person.sayHello.bind(anotherPerson);
greet('Hi'); // output: Hi, my name is Bob.
- Object.assign
Object.assign()
方法用于將源對象的所有可枚舉屬性復制到目標對象中,如果有相同的屬性晶衷,則后面的屬性值會覆蓋前面的屬性值蓝纲。該方法會返回目標對象。
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const result = Object.assign(obj1, obj2);
console.log(result); // output: { a: 1, b: 3, c: 4 }
當然晌纫,還有一些常用的對象方法:
- Object.keys
該方法用于返回一個給定對象所有可枚舉屬性的字符串數(shù)組税迷。
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj)); // output: ['a', 'b', 'c']
- Object.values
該方法用于返回一個給定對象所有可枚舉屬性的值的數(shù)組。
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.values(obj)); // output: [1, 2, 3]
- Object.entries
該方法用于返回一個給定對象所有可枚舉屬性的鍵值對的數(shù)組锹漱。
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.entries(obj)); // output: [['a', 1], ['b', 2], ['c', 3]]
- hasOwnProperty
hasOwnProperty()
方法用于判斷一個對象是否包含了指定的屬性箭养,該屬性必須是對象本身擁有的,而不是繼承自原型鏈上的屬性哥牍。
const obj = { a: 1, b: 2 };
console.log(obj.hasOwnProperty('a')); // output: true
console.log(obj.hasOwnProperty('toString')); // output: false
- instanceof
instanceof
運算符用于檢測一個對象是否屬于某個類的實例毕泌。
class Animal {}
class Dog extends Animal {}
const animal = new Animal();
const dog = new Dog();
console.log(animal instanceof Animal); // output: true
console.log(dog instanceof Dog); // output: true
console.log(dog instanceof Animal); // output: true
是的,這里還有一些常用的對象方法:
- toString
toString()
方法用于將一個對象轉(zhuǎn)換為字符串形式嗅辣。
const obj = { a: 1, b: 2 };
console.log(obj.toString()); // output: "[object Object]"
- JSON.stringify
JSON.stringify()
方法用于將一個 JavaScript 對象轉(zhuǎn)換為一個 JSON 字符串撼泛。
const obj = { a: 1, b: 2 };
console.log(JSON.stringify(obj)); // output: '{"a":1,"b":2}'
- JSON.parse
JSON.parse()
方法用于將一個 JSON 字符串轉(zhuǎn)換為一個 JavaScript 對象。
const json = '{"a":1,"b":2}';
console.log(JSON.parse(json)); // output: { a: 1, b: 2 }
- Symbol
Symbol
是 ECMAScript 6 引入的新的原始數(shù)據(jù)類型辩诞,用于表示獨一無二的變量名坎弯。它可以用作對象的屬性名,避免屬性名沖突译暂。
const symbol = Symbol("description");
const obj = {
[symbol]: "Hello"
};
console.log(obj[symbol]); // output: "Hello"
- Promise
Promise
是 ECMAScript 6 引入的新的異步編程模型,用于處理復雜的異步操作撩炊。它可以避免回調(diào)嵌套和代碼深度嵌套等問題外永,讓異步編程更加簡單和可維護。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Hello");
}, 1000);
});
promise.then((result) => {
console.log(result); // output: "Hello"
});