JavaScript - 对象方法

你好,未来的JavaScript法师们!今天,我们将深入JavaScript对象方法的神奇世界。拿起你的编码魔杖(键盘),让我们一起踏上这段激动人心的旅程!

JavaScript - Object Methods

什么是JavaScript对象方法?

在我们用对象方法施法之前,先来了解一下它们是什么。简单来说,对象方法是属于对象的函数。它们就像是我们对象拥有的特殊能力。

让我们来看一个基本示例:

let wizard = {
name: '梅林',
castSpell: function() {
console.log('Abracadabra!');
}
};

wizard.castSpell(); // 输出: Abracadabra!

在这里,castSpell 是我们 wizard 对象的一个方法。当我们调用 wizard.castSpell() 时,我们的法师执行了他的魔法!

对象方法简写

现在,让我们学习一个 neat 技巧。ES6 引入了一种更短的定义对象方法的方式。这就像是为编写对象方法提供了一个魔法快捷方式!

let wizard = {
name: '梅林',
castSpell() {
console.log('Abracadabra!');
}
};

wizard.castSpell(); // 输出: Abracadabra!

看到我们移除了 : function 部分了吗?它更短、更干净,就像一本组织良好的魔法书!

更新或向对象添加方法

JavaScript中的对象是灵活的。我们可以在对象创建后添加新的方法或更新现有的方法。这就像教我们的法师新的咒语!

let wizard = {
name: '梅林'
};

// 添加一个新方法
wizard.castFireball = function() {
console.log('Whoosh! Fireball launched!');
};

wizard.castFireball(); // 输出: Whoosh! Fireball launched!

// 更新一个现有方法
wizard.castFireball = function() {
console.log('Super fireball engaged!');
};

wizard.castFireball(); // 输出: Super fireball engaged!

在这个示例中,我们首先向我们的法师添加了一个 castFireball 方法,然后我们更新它以施放一个更强大的火球!

使用内置方法

JavaScript对象带有一些预安装的咒语...我是说,方法!让我们探索其中几个:

1. Object.keys()

这个方法返回一个包含给定对象自身属性名称的数组。

let spellBook = {
fireball: 'Deals fire damage',
iceBeam: 'Freezes the target',
thunderbolt: 'Electrifies the enemy'
};

console.log(Object.keys(spellBook));
// 输出: ['fireball', 'iceBeam', 'thunderbolt']

2. Object.values()

Object.keys() 类似,但它返回一个包含对象自身可枚举属性值的数组。

console.log(Object.values(spellBook));
// 输出: ['Deals fire damage', 'Freezes the target', 'Electrifies the enemy']

3. Object.entries()

这个方法返回一个包含给定对象自身可枚举字符串键属性 [键,值] 对的数组。

console.log(Object.entries(spellBook));
// 输出: [
//   ['fireball', 'Deals fire damage'],
//   ['iceBeam', 'Freezes the target'],
//   ['thunderbolt', 'Electrifies the enemy']
// ]

下面是一个总结这些内置方法的表格:

方法 描述 示例
Object.keys() 返回对象属性名称的数组 Object.keys(spellBook)
Object.values() 返回对象属性值的数组 Object.values(spellBook)
Object.entries() 返回对象的 [键,值] 对数组 Object.entries(spellBook)

对象方法中的 'this' 关键字

现在,让我们来讨论一个强大但有时会让人混淆的概念:this 关键字。在对象方法中,this 指的是方法所属的对象。就像对象在说“这就是我!”

let wizard = {
name: '梅林',
introduceYourself() {
console.log(`Hello, I am ${this.name}!`);
}
};

wizard.introduceYourself(); // 输出: Hello, I am Merlin!

在这个示例中,this.name 指的是 wizard 对象的 name 属性。

实际示例:施法游戏

让我们把我们所学的知识结合起来,制作一个有趣的施法游戏!

let wizard = {
name: '梅林',
mana: 100,
spells: {
fireball: 30,
iceBeam: 20,
heal: 50
},
castSpell(spell) {
if (this.mana >= this.spells[spell]) {
this.mana -= this.spells[spell];
console.log(`${this.name} casts ${spell}! Mana remaining: ${this.mana}`);
} else {
console.log(`${this.name} doesn't have enough mana to cast ${spell}!`);
}
}
};

wizard.castSpell('fireball'); // 输出: Merlin casts fireball! Mana remaining: 70
wizard.castSpell('heal'); // 输出: Merlin casts heal! Mana remaining: 20
wizard.castSpell('fireball'); // 输出: Merlin doesn't have enough mana to cast fireball!

在这个游戏中,我们的法师只要有足够的法力就可以施法。castSpell 方法检查施法的法力成本,如果可能,则从中扣除法师的法力,并给我们反馈。

就这样,学徒们!你已经学习了JavaScript对象方法的基础。记住,熟能生巧,所以继续尝试这些概念。很快,你将像真正的JavaScript法师一样编码!愿你的代码无bug,你的方法总是返回预期的输出。快乐编码!

Credits: Image by storyset