创建对象
创建对象是使用 JavaScript 的第一步。你可以通过几种不同的方式来创建对象:
字面量表示法
最简单的方式是使用对象字面量来创建一个对象:
let person = {
name: "张三",
age: 30,
city: "北京"
};构造函数
另一种方法是使用构造函数来创建对象。构造函数是一种特殊的函数,可以用来初始化新创建的对象:
function Person(name, age, city) {
this.name = name;
this.age = age;
this.city = city;
}
let zhangsan = new Person("张三", 30, "北京");使用 Object.create() 方法
Object.create() 方法允许你通过指定的原型对象来创建新的对象:
// www.javascriptcn.com code example
let personPrototype = {
getDetails: function() {
return `${this.name} is ${this.age} years old and lives in ${this.city}`;
}
};
let zhangsan = Object.create(personPrototype);
zhangsan.name = "张三";
zhangsan.age = 30;
zhangsan.city = "北京";
console.log(zhangsan.getDetails());访问对象属性
一旦你创建了一个对象,就可以通过几种不同的方式来访问它的属性。
点符号
最常用的方法是使用点符号来访问对象的属性:
console.log(zhangsan.name); // 输出 "张三"
方括号符号
当属性名包含特殊字符或是一个变量时,可以使用方括号符号来访问属性:
let propertyName = "name"; console.log(zhangsan[propertyName]); // 输出 "张三" zhangsan["age"] = 31; // 修改属性值
访问不存在的属性
如果尝试访问一个不存在的属性,JavaScript 会返回 undefined:
console.log(zhangsan.email); // 输出 undefined
添加和修改属性
你可以轻松地为对象添加新的属性,或者修改已有的属性值。
添加属性
你可以直接为对象添加一个新的属性:
zhangsan.email = "zhangsan@example.com";
修改属性
修改属性值与添加属性类似,只需要给属性赋一个新的值即可:
zhangsan.age = 31;
删除属性
你可以使用 delete 操作符来删除对象的属性:
delete zhangsan.email;
删除后,该属性就不再存在于对象中了。
遍历对象属性
遍历对象的属性是一个常见的任务。有几种方法可以实现这个目标:
for-in 循环
for-in 循环是最常用的遍历对象属性的方法:
for (let key in zhangsan) {
if (zhangsan.hasOwnProperty(key)) { // 只遍历对象自身的属性,不包括继承的属性
console.log(`${key}: ${zhangsan[key]}`);
}
}Object.keys()
Object.keys() 方法返回一个包含对象所有可枚举属性名称的数组,然后你可以使用 forEach 来遍历这些属性:
Object.keys(zhangsan).forEach(function(key) {
console.log(`${key}: ${zhangsan[key]}`);
});Object.getOwnPropertyNames()
Object.getOwnPropertyNames() 方法返回一个包含对象所有属性名称(包括不可枚举的属性)的数组:
let allPropertyNames = Object.getOwnPropertyNames(zhangsan);
allPropertyNames.forEach(function(key) {
console.log(`${key}: ${zhangsan[key]}`);
});对象方法
对象不仅可以包含数据属性,还可以包含方法。方法就是对象上的函数属性:
// www.javascriptcn.com code example
let person = {
name: "张三",
age: 30,
city: "北京",
getDetails: function() {
return `${this.name} is ${this.age} years old and lives in ${this.city}`;
}
};
console.log(person.getDetails()); // 输出 "张三 is 30 years old and lives in 北京"对象的原型链
每个对象都有一个原型(prototype),原型本身也是一个对象。当访问一个对象的属性时,如果该对象自身没有这个属性,那么 JavaScript 引擎就会在原型对象上查找这个属性。
设置原型
你可以通过设置 __proto__ 属性或者使用 Object.create() 方法来改变对象的原型:
// www.javascriptcn.com code example
// 使用 __proto__
zhangsan.__proto__.getCountry = function() {
return "中国";
};
console.log(zhangsan.getCountry()); // 输出 "中国"
// 使用 Object.create()
let personPrototype = {
getCountry: function() {
return "中国";
}
};
let liusiu = Object.create(personPrototype);
liusiu.name = "刘秀";
liusiu.age = 25;
liusiu.city = "南京";
console.log(liusiu.getCountry()); // 输出 "中国"继承
通过原型链,子对象可以继承父对象的属性和方法。这使得代码复用变得非常容易:
// www.javascriptcn.com code example
function Employee(name, age, city, position) {
Person.call(this, name, age, city); // 调用父构造函数
this.position = position;
}
Employee.prototype = Object.create(Person.prototype); // 设置原型
Employee.prototype.constructor = Employee; // 修正构造函数引用
let zhangsan = new Employee("张三", 30, "北京", "工程师");
console.log(zhangsan.getDetails()); // 输出 "张三 is 30 years old and lives in 北京"
console.log(zhangsan.position); // 输出 "工程师"以上就是关于 JavaScript 对象操作的一些基础和高级内容。理解这些概念将帮助你在日常编程中更有效地处理对象。