# 03 对象和属性
1. 用对象(object
)属性(property
)代替变量把数据整合在一个对象中
var user = {
name: '吉吉喵', // 名字
money: 10, // 金钱
hp: 100, // 生命值
atk: 20, // 攻击力
}
console.log(user.name + '有' + user.money + '金币 ' + user.hp + '生命 ' + user.atk + '攻击力') // 用user.属性名 "点"语法来获取对象属性值
对象属性跟变量相比,在表达多个物体数据的情况下,用对象来表示物体比用零散的变量更方便
var name1 = '吉吉喵' // 名字
var money1 = 10 // 金钱
var hp1 = 100 // 生命值
var atk1 = 20 // 攻击力
var name2 = '雷电猴' // 名字
var money2 = 5 // 金钱
var hp2 = 80 // 生命值
var atk2 = 30 // 攻击力
console.log(name1 + '有' + money1 + '金币 ' + hp1 + '生命 ' + atk1 + '攻击力')
//如果要显示雷电猴的数据, 需要逐个变量改成:
//console.log(name2 + '有' + money2 + '金币 ' + hp2 + '生命 ' + atk2 + '攻击力')
/////////////// 而下面的代码显示雷电猴数据则不用逐个修改变量名, 只需要修改变量user指向的对象
var user1 = {
name: '吉吉喵', // 名字
money: 10, // 金钱
hp: 100, // 生命值
atk: 20, // 攻击力
}
var user2 = {
name: '雷电猴', // 名字
money: 5, // 金钱
hp: 80, // 生命值
atk: 30, // 攻击力
}
var user = user1 //先演示user1输出, 然后改成user = user2再演示输出
console.log(user.name + '有' + user.money + '金币 ' + user.hp + '生命 ' + user.atk + '攻击力')
2. 对象属性的赋值和读取
把相关的变量存放在一个对象里,这些变量成为了对象的属性,属性跟变量一样可以被赋值,未赋值的变量可以被读但会返回undefined
var user = {// 有初始属性
name: '吉吉喵', // 属性name, 初始值'吉吉喵'
money: 10, // 属性money, 初始值10
}
console.log(user.atk) // 返回unefined, 因为atk未被定义
console.log(atk) //变量在这一点则很不一样, 未被定义被引用会报错而不是返回undefined
// 下面赋值写法跟上面的结果一样
var user = {} // 无初始属性
user.name = '吉吉喵' // 后来赋值补上的属性name
user.money = 10 // 后来赋值补上的属性money
// 还可以用方括号包围字符串的语法来写, 这种写法更加灵活, 因为字符串可以用变量或某些运算结果来获得
var user = {} // 无初始属性
user['name'] = '吉吉喵' // 后来赋值补上的属性name
user['money'] = 10 // 后来赋值补上的属性money
console.log(user['name'] + '有' + user['money'] + '金币 ')
// 跟变量一样, 属性也可以进行加减乘除之类的运算
user.money += 10
user.money -= 5
user.money *= 2
user.money /= 4
// 计算出来的属性名'name'
var prop = 'na' + 'me'
user[prop] = '雷电猴'
console.log(user.name)
//重点知识! 对象属性赋值与读取在box3中的经典用例是自定义一些API没有的玩家属性
world.onPlayerJoin(({ entity }) => {
entity.money = 100 // 给玩家实体添加money这个新属性, api里是没有money这个属性的
world.say(`${entity.player.name}有${entity.money}块钱`) //世界播放玩家有多少钱
})
3. 嵌套对象
// 对象里边存放其他对象, 下面的简单例子是模仿我们api里的玩家实体结构
var entity = {
player: {
name: '吉吉喵', // 名字
},
position: {
x: 64,
y: 128,
z: 32,
},
money: 10,
hp: 100,
atk: 20,
}
// 用pos暂存entity.position, 这样下面引用xyz就不用每个都写成entity.position.x entity.position.y entity.position.z 这么冗长
var pos = entity.position
console.log(`${entity.player.name}的位置是${pos.x} ${pos.y} ${pos.z}`)
← 02 基础运算与逻辑 04 函数的使用 →