在JavaScript中。对象是一组无序的相关属性和方法的集合,所有的事物都是对象。
对象由属性和方法组成。
属性:事物的特征。方法:事物的行为。
一、对象创建
1.利用字面量创建对象
var obj = {}; //空对象
var obj = {
成员属性名:成员属性对应值;
成员方法名:成员方法对应函数;
}; //非空对象
2.利用new Object创建对象
var obj = new Object(); //空对象
var obj = new Object();
obj.属性名 = 成员属性对应值;
obj.方法名 = 成员方法对应函数; //非空对象
我们可以使用 instanceof 运算符检查一个对象是否是一个类的实例,它返回true或false。
对象 instanceof 构造函数
3.利用构造函数创建对象
function 构造函数名(形参列表){
this.属性 = 属性值;
this.方法 = function(){
方法体;
};
}
var obj = new 构造函数名(实参列表);
二、对象访问
对象名.成员属性名
对象名['成员属性名']
对象名.成员方法名()
对象名['成员方法名']()
注:JavaScript中的对象具有动态特征。
如果一个对象没有成员,用户可以手动赋值属性或方法来添加成员。
如果访问对象不存在的属性,会返回undefined。
三、对象遍历
在JavaScript中,for...in...循环用于遍历对象的可枚举属性。这种循环提供了一种简洁的方式来访问对象的所有属性,并对其进行操作。
for (let key in obj) {
console.log(key, obj[key]);
}
注:for…in循环会遍历对象自身的可枚举属性以及继承的可枚举属性。
在遍历过程中,属性名会被赋值给循环变量。如果需要获取属性值,可以通过对象和属性名使用下标访问的方式来获取属性值。
使用for…in循环遍历对象时,无法保证属性遍历的顺序。对象的属性在内部存储时是没有固定顺序的,因此遍历顺序不一定与属性定义的顺序相同。
四、原型
每个JavaScript对象都有一个与之关联的原型对象。原型对象是一个包含了可以由其他对象共享的属性和方法的对象。这意味着,当一个对象试图访问一个它自身没有的属性或方法时,JavaScript会查看该对象的原型对象,看看那里是否有这个属性或方法。这种机制使得JavaScript能够实现继承和多态,提高代码的复用性和扩展性。
以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了。
例如:
// 创建一个Person构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
// 在Person的原型上添加一个greet方法
Person.prototype.greet = function() {
console.log("Hello, my name is" + this.name + "and I am" + this.age + "years old.");
};
// 创建Person对象
var person1 = new Person('Alice', 30);
var person2 = new Person('Bob', 25);
// 调用继承自原型的greet方法
person1.greet(); // 输出: Hello, my name is Alice and I'm 30 years old.
person2.greet(); // 输出: Hello, my name is Bob and I'm 25 years old.
原型链
当访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript引擎会沿着原型链向上查找,直到找到对应的属性或方法,或者遍历到原型链的顶端(通常是null或Object.prototype)。通过原型链,可以实现属性和方法的共享,避免重复创建和占用内存,从而提高代码的复用性和性能。