小白新手村小boss之妖怪现出“原型”:JS晦涩难懂的原型与原型链(1)

发布于:2024-12-06 ⋅ 阅读:(85) ⋅ 点赞:(0)

JavaScript中的原型与原型链(上篇)

初识原型与原型链

在JavaScript中,原型(prototype)和原型链(prototype chain)是理解继承和对象属性查找的核心概念。这篇文章将从基础开始,逐步深入,帮助你掌握JavaScript中的原型与原型链。

什么是原型?

在JavaScript中,每个对象都有一个特殊的隐藏属性[[Prototype]],它指向另一个对象,这个对象就是原对象的原型。原型对象上定义的属性和方法可以被原对象继承。

什么是原型链?

原型链是指当试图访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript引擎会沿着该对象的[[Prototype]]向上查找,直到找到属性或到达原型链的末端(null)。

原型的创建与使用

1. 使用构造函数创建对象

JavaScript中的对象可以通过构造函数来创建。构造函数是一种特殊的函数,用于创建和初始化对象。

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}!`);
};

const person = new Person('Xiaobai');
person.greet(); // 输出:Hello, my name is Xiaobai!

在这个例子中,Person是一个构造函数,它创建了一个具有name属性的对象。Person.prototype.greet是一个在原型上定义的方法,所有Person的实例都可以访问这个方法。

2. 使用Object.create()创建对象

Object.create()方法可以用来创建一个新对象,它的原型是传入的第一个参数。

const proto = {
  greet() {
    console.log(`Hello from prototype!`);
  }
};

const obj = Object.create(proto);
obj.greet(); // 输出:Hello from prototype!

在这个例子中,我们创建了一个原型对象proto,并定义了一个greet方法。然后使用Object.create(proto)创建了一个新的对象obj,它的原型是proto,因此obj可以访问greet方法。

3. 使用字面量创建对象

对象字面量是创建对象的另一种方式,这种方式创建的对象自动将Object.prototype作为其原型。

const obj = {
  name: 'Xiaobai',
  greet() {
    console.log(`Hello, my name is ${this.name}!`);
  }
};

obj.greet(); // 输出:Hello, my name is Xiaobai!

在这个例子中,obj是一个对象字面量,它有一个name属性和一个greet方法。由于obj没有显式指定原型,它的原型默认是Object.prototype

总结

本篇文章介绍了JavaScript中的原型和原型链的基本概念,以及如何使用构造函数、Object.create()和对象字面量来创建对象。在下一篇文章中,我们将深入探讨原型链的工作原理,以及如何使用原型链来实现继承和属性查找。敬请期待!


引用来源:

  • [继承与原型链 - JavaScript | MDN]

网站公告

今日签到

点亮在社区的每一天
去签到