首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript原型链解析

当谈到 JavaScript 中的原型链时,我们需要先理解 JavaScript 中的对象和原型的概念。原型链是 JavaScript 中实现继承的一种机制,它允许对象通过继承从其他对象中获取属性和方法。

对象和原型的概念

在 JavaScript 中,几乎所有的东西都是对象。对象是键值对的集合,其中键是字符串或符号,值可以是各种数据类型,包括其他对象。

每个 JavaScript 对象都有一个关联的原型。原型本身也是一个对象,它包含共享的属性和方法。当你访问对象的属性或方法时,如果对象本身没有这个属性或方法,JavaScript 将会去它的原型链中查找。

原型链的构建

让我们从一个简单的例子开始:

在这个例子中,我们定义了一个构造函数 Person,它有一个属性 name 和一个方法 sayHello。然后,我们使用 new 关键字创建了一个名为 person1 的对象。

在这个例子中,person1 对象的原型链如下:

person1 本身没有 sayHello 方法,所以它会去 Person.prototype 中查找。

Person.prototype 也没有 sayHello 方法,但它有 Object.prototype,所以它会继续查找。

Object.prototype 有一些内置的方法,但是也没有 sayHello 方法,最终原型链会到达 null,表示没有更多的原型。

原型链继承

原型链允许对象从其他对象继承属性和方法。例如:

在这个例子中,我们定义了一个构造函数 Student,它继承了 Person.prototype。这意味着 student1 对象继承了 Person 中的 sayHello 方法。同时,我们为 Student.prototype 添加了一个新的方法 showGrade。

student1 对象的原型链如下:

prototype、__ proto __、constructor

prototype 属性:

在函数对象中,存在一个特殊的属性叫做 prototype。这个属性指向一个对象,它包含了该函数构造出来的实例对象共享的属性和方法。这个属性主要在构造函数与实例之间共享方法和属性时使用。

__proto__ 属性:

__proto__ 是每个 JavaScript 对象都有的一个属性,它指向该对象的原型。通过 __proto__,对象可以访问到原型对象的属性和方法。然而,需要注意的是,虽然 __proto__ 是标准的属性,但它并不是在所有 JavaScript 引擎中都被广泛支持的。

在现代 JavaScript 中,可以使用 Object.getPrototypeOf(obj) 来获取对象的原型,而不直接使用 obj.__proto__。

constructor 属性:

constructor 属性是一个指向创建当前对象的构造函数的引用。在默认情况下,所有函数对象的 prototype 上都有一个 constructor 属性,指向创建该对象的构造函数。

总结

在 JavaScript 中,prototype 用于设置共享属性和方法,__proto__ 用于访问对象的原型,constructor 用于指向创建对象的构造函数。这三个属性一起构成了原型链的基础,允许对象在继承属性和方法时实现代码的重用和共享。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ODbYQiPim7fEK_R4cHBufaAw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券