返回

认识JavaScript中的对象及原型,理解数据结构的奥秘

前端

JavaScript中的对象

在JavaScript中,对象是一个复合数据类型,它由属性和方法组成。属性用于存储数据,而方法定义了可以对这些数据执行的操作。对象使用花括号({})来创建,每个属性和方法都以冒号分隔。例如,以下代码创建了一个具有两个属性(name和age)和一个方法(greet)的对象:

const person = {
  name: "John Doe",
  age: 30,
  greet: function() {
    console.log("Hello, my name is " + this.name);
  }
};

要访问对象属性,可以使用点(.)运算符,后面跟着属性的名称。例如,以下代码将输出"John Doe":

console.log(person.name); // "John Doe"

要调用对象方法,可以使用点(.)运算符,后面跟着方法的名称和括号。括号中可以传递参数,就像调用函数一样。例如,以下代码将输出"Hello, my name is John Doe":

person.greet(); // "Hello, my name is John Doe"

原型

每个JavaScript对象都有一个原型,原型是一个对象,它包含所有从该对象继承的属性和方法。原型是通过在创建对象时使用Object.create()方法来创建的。例如,以下代码创建了一个名为student的新对象,该对象从person对象继承:

const student = Object.create(person);

现在,student对象将具有person对象的属性和方法。例如,以下代码将输出"John Doe":

console.log(student.name); // "John Doe"

也可以为原型添加新的属性和方法。例如,以下代码向student原型添加了一个名为major的属性:

student.prototype.major = "Computer Science";

现在,所有从student对象创建的对象都将具有major属性。例如,以下代码创建了一个新的student对象,该对象具有major属性:

const newStudent = Object.create(student);
console.log(newStudent.major); // "Computer Science"

继承

继承是一种允许对象从另一个对象继承属性和方法的机制。在JavaScript中,继承是通过原型链来实现的。原型链是一个对象列表,每个对象都指向其原型。如果一个对象不具有某个属性或方法,则它将沿原型链向上搜索,直到找到具有该属性或方法的对象。

例如,以下代码创建一个具有name属性和greet方法的对象:

const person = {
  name: "John Doe",
  greet: function() {
    console.log("Hello, my name is " + this.name);
  }
};

现在,我们可以创建一个从person对象继承的新对象。例如,以下代码创建一个名为student的新对象,该对象从person对象继承:

const student = Object.create(person);

现在,student对象将具有person对象的属性和方法。例如,以下代码将输出"John Doe":

console.log(student.name); // "John Doe"

student对象也可以访问person原型上的属性和方法。例如,以下代码将输出"Hello, my name is John Doe":

student.greet(); // "Hello, my name is John Doe"

封装

封装是一种将数据和行为组合在一起,并将其与其他部分隔离开来的机制。在JavaScript中,封装是通过使用对象来实现的。对象可以将数据存储在私有属性中,并通过公共方法来访问这些数据。例如,以下代码创建了一个具有私有name属性和公共getName方法的对象:

const person = {
  _name: "John Doe",
  getName: function() {
    return this._name;
  }
};

现在,我们可以创建一个新的person对象,并使用getName方法来访问其_name属性,而无需直接访问该属性。例如,以下代码将输出"John Doe":

const newPerson = new person();
console.log(newPerson.getName()); // "John Doe"

实例

以下是一些使用JavaScript对象和原型的示例:

  • 创建一个表示购物车的对象,该对象具有以下属性和方法:
    • items: 一个包含购物车中物品的数组。
    • addItem(item): 将一个物品添加到购物车。
    • removeItem(item): 从购物车中移除一个物品。
    • getTotalCost(): 计算购物车中所有物品的总成本。
  • 创建一个表示银行账户的对象,该对象具有以下属性和方法:
    • balance: 账户的当前余额。
    • deposit(amount): 向账户中存入一笔钱。
    • withdraw(amount): 从账户中提取一笔钱。
    • getStatement(): 获取账户的交易记录。
  • 创建一个表示学生的