【JS 原型链】

文章详细介绍了JavaScript原型链的概念,它是JavaScript实现面向对象编程的关键。每个对象都有一个原型,通过原型链可以追溯到Object.prototype。通过构造函数和原型对象,可以创建对象实例并实现继承。例如,通过定义Animal和Dog构造函数,展示了如何通过原型链实现方法的继承。
摘要由CSDN通过智能技术生成

JavaScript 原型链是一个重要的概念,它是 JavaScript 语言实现面向对象编程的核心。在 JavaScript 中,每个对象都有一个与之关联的原型,并且该对象继承了原型中的属性和方法。这些原型组成了一个原型链,可以通过该链追溯到顶层的 Object.prototype。

JavaScript 中的每个对象都有一个内部属性[[Prototype]],指向它的原型对象。如果该对象无法在自己的属性中找到一个属性或方法,它将查找与其关联的原型对象中的属性或方法。如果还是找不到,则会查找原型对象的原型,直到找到 Object.prototype,即顶层原型。这种机制被称为原型链。

例如,假设我们有这样一个对象:

let obj = {
  name: "Tom",
  age: 20
};

我们可以通过 Object.getPrototypeOf(obj) 来获取 obj 对象的原型,输出结果如下:

// {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}

可以看到,obj 对象的原型是 Object.prototype。如果我们访问 obj.toString() 方法,由于 obj 对象本身没有该方法,JavaScript 将会在原型链上查找该方法,找到 Object.prototype 上的 toString() 方法并执行。从而,实现了对 obj.toString() 方法的调用。

在 JavaScript 中,我们可以通过构造函数创建对象的实例。例如:

function Person(name) {
  this.name = name;
}
let p = new Person("Tom");

在这个例子中,我们首先定义了一个名为 Person 的构造函数,它有一个参数 name,用于接收人名。在实例化一个 Person 对象时,我们通过 new 操作符调用了该构造函数,并传递了一个参数 “Tom”。在这个过程中,JavaScript 会自动为新创建的对象设置一个原型,即 Person.prototype。我们可以通过 Object.getPrototypeOf§ 或 p.proto 访问该对象的原型。

当我们在实例 p 上访问属性时,如果 p 对象本身没有该属性,则会通过原型链查找该属性。例如,如果我们在 p 对象上访问 p.toString() 方法,由于 p 对象本身没有该方法,JavaScript 将会在原型链上查找该方法,找到 Person.prototype 上的 toString() 方法并执行。如果 Person.prototype 上也没有该方法,则会在原型链的上一级继续查找,即 Object.prototype 上查找该方法。如果还是找不到,则会返回 undefined。

在 JavaScript 中,我们可以通过给对象的原型对象添加属性和方法来实现继承。例如:

function Animal() {}
Animal.prototype.walk = function() {
  console.log("Animal is walking");
};
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.bark = function() {
  console.log("Dog is barking");
};
let d = new Dog();

在这个例子中,我们首先定义了一个名为 Animal 的构造函数,并在其原型对象上添加了一个 walk() 方法。然后,我们定义了一个名为 Dog 的构造函数,它通过 Object.create() 方法继承了 Animal.prototype,并在其原型对象上添加了一个 bark() 方法。最后,我们通过 new 操作符创建了一个 Dog 的实例 d。

在实例 d 上访问 walk() 和 bark() 方法时,如果 d 对象本身没有该方法,则会通过原型链查找该方法。如果在 Dog.prototype 和 Animal.prototype 上都找不到该方法,则会在 Object.prototype 上查找,如果还是找不到,则会返回 undefined。

总之,JavaScript 中的原型链是一个非常重要的概念,它是 JavaScript 实现面向对象编程的核心机制。通过构造函数和原型对象,我们可以轻松地创建对象的实例,并实现对象的继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值