广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中原型和原型链是什么
  • 670
分享到

JavaScript中原型和原型链是什么

2024-04-02 19:04:59 670人浏览 安东尼
摘要

本篇文章给大家分享的是有关javascript中原型和原型链是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。而原型、原型链就是其中之一。每

本篇文章给大家分享的是有关javascript中原型和原型链是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

而原型、原型链就是其中之一。
每一个构造函数都有一个与之相关联的对象,该对象称之为原型对象。
每个实例对象都能共享其原型对象上的属性和方法。
原型对象的作用主要用来实现属性的继承,让实例对象能共享原型对象的属性,减少内存分配。
所以,在上一节中,我们想在每个Person对象中共享同一个say方法,可以这样来实现。

function Person(name, age) {
this.name = name;
this.age = age;
}//在原型对象上添加say函数,实例对象共享该函数
Person.prototype.say = function(){
console.log("say hello");
};var p = new Person("zs", 10, say);
p.say();var p2 = new Person("zs", 10, say);
p2.say();
在原型对象上添加成员的方法:
构造函数.prototype.成员名 = 成员值;
为Person原型对象添加say方法后,实现了在多个实例对象上共享该方法的功能。
获取原型对象的方法:
构造函数.prototype
实例对象. proto
在每个实例对象上都有一个 proto 的属性,也是用来获取该对象的原型对象。
Person.prototype == p. proto ;//true
下图详细说明了各对象之间的关系:

JavaScript中原型和原型链是什么
面向对象中的核心概念
构造函数:Person,和new关键字一起创建对象
构造函数的原型对象:Person.prototype,
原型对象:和创建实例对象的构造函数相互关联的对象
实例对象:由构造器创建出来的对象称之为实例对象
实例化:由构造器创建实例对象的过程称之为实例化
对象的成员:属性+方法
实例成员:实例对象上的属性和方法,name,age,只能当前实例对象才能访问
原型成员:原型对象上的属性和方法,say(),使用该原型对象对应构造器创建出来的所有实例对象都能访问
静态成员:直接添加在构造函数上的属性和方法,只能使用构造函数才能访问

proto 属性介绍
该属性是在es6之后才纳入规范,在这之前,只有部分浏览器实现。
该属性可以获取指定实例对象的原型对象,p. proto ,和Person.prototype获取的一样
我们也可以使用Object构造器上的getPrototypeOf(实例对象)方法获取指定实例对象的原型对象
以上提到的三种获取原型对象的方法所得到的结果是一样的。即:

Object.getPrototypeOf(p) == Person.prototype == p. proto

扩展内置对象

内置对象是js中事先定义好的对象,可以直接拿来使用的对象,在这类对象中已经封装好了一堆的方法和属性,方便开发者完成基本的功能。

但是在实际开发中,这些属性或者方法不一定能够满足我们的需求,此时就需要对这些内置对象做功能扩展。

需求:为数组对象添加一个获取元素个数的方法

var arr1 = [1, 2, 3];var arr2 = ["A", "B", "C","D"];
arr1.getLength = function () {
return this.length;
}console.log(arr1.getLength());

上面为数组arr1添加了一个getLength()方法获取其元素个数,那么此时的arr2对象上有这个方法吗?相信大家心里都有答案。如果想要arr2拥有同样的功能,也需要同样的操作。

所以这种方式不可取,如果100个数组都想都需要这样的功能,操作起来就比较复杂了。
根据前面学过的知识点,我们完全可以使用原型来解决这个问题。

var arr1 = [1, 2, 3];var arr2 = ["A", "B", "C","D"];Array.prototype.getLength = function () {
return this.length;
}console.log(arr1.getLength());// 3console.log(arr2.getLength());// 4

我们直接在Array的原型对象上添加getLength()方法,之后创建的所有的数组对象都拥有了该方法,搞定!
这种方式能够解决我们的问题,但是还是存在问题的:

  1. 在多人开发的环境中,如果使用这种方式对内置对象做扩展,可能会对其他开发人员造成影响

  2. 如果在原型对象上添加了过多的成员,会降低对象成员的搜索效率。

安全的扩展内置对象

上面扩展内置对象的方法存在一定的问题,问题的关键其实在于我们是直接在内置对象的原型上进行拓展的,这样导致对其他使用该对象的开发人员造成影响。
所以,我们的解决思路就是,自定义一个对象,让该对象继承需要扩展的内置对象,然后只需要对自定的对象进行操作即可。

function MyArray() {
}//让MyArray的原型指向Array对象//即继承Array中的所有成员
MyArray.prototype= new Array();
MyArray.prototype.getLength=function () {
return this.length;
}var arr1 = new MyArray();
arr1.push("A","B","C","D","E");//内置对象的初始方法console.log(arr1.getLength());//扩展之后的方法

接下来,如果想要对数组做扩展,我们只需要操作MyArray即可,而不需要直接操作Array,如此,就不会对其他使用Array的开发人员操作影响了。看图理解:
JavaScript中原型和原型链是什么
原型链的结构图
每个实例对象都是由构造函数创建出来的
每一个构造函数都有默认关联的原型对象
原型对象本身也是对象,所以它也有自己的构造函数
原型对象的构造函数也有默认关联的原型对象
以上就构成了一种链式访问结构,称之为原型链
下面画出了Person对象和Array对象的原型链:

JavaScript中原型和原型链是什么

以上就是JavaScript中原型和原型链是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网JavaScript频道。

--结束END--

本文标题: JavaScript中原型和原型链是什么

本文链接: https://www.lsjlt.com/news/77796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中原型和原型链是什么
    本篇文章给大家分享的是有关JavaScript中原型和原型链是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。而原型、原型链就是其中之一。每...
    99+
    2022-10-19
  • JavaScript中的原型和原型链是什么
    这篇文章主要介绍“JavaScript中的原型和原型链是什么”,在日常操作中,相信很多人在JavaScript中的原型和原型链是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中的原型和...
    99+
    2023-06-21
  • javascript的原型和原型链是什么
    小编给大家分享一下javascript的原型和原型链是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2022-10-19
  • JavaScript原型与原型链是什么
    这篇文章主要介绍“JavaScript原型与原型链是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript原型与原型链是什么”文章能帮助大家解决问题...
    99+
    2022-10-19
  • Javascript的原型和原型链是什么意思
    这篇文章主要介绍Javascript的原型和原型链是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、为什么要使用原型?怎样去理解原型的出现1、对象字面量创建对象的缺点想要介绍原型,就不得不提为什么我们要使用...
    99+
    2023-06-29
  • 什么是JS原型和原型链
    本篇内容介绍了“什么是JS原型和原型链”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.JS 的发展史要想...
    99+
    2022-10-19
  • JavaScript原型链是什么
    这篇文章主要为大家展示了“JavaScript原型链是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript原型链是什么”这篇文章吧。1、构造函数和实例假设你声明一个方法叫做Fo...
    99+
    2023-06-25
  • JavaScript原型链的原理是什么
    这篇文章主要讲解了“JavaScript原型链的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript原型链的原理是什么”吧!解析原型...
    99+
    2022-10-19
  • javascript中的原型链是什么
    本篇内容主要讲解“javascript中的原型链是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript中的原型链是什么”吧! ...
    99+
    2022-10-19
  • Javascript中怎么实现原型和原型链
    今天就跟大家聊聊有关Javascript中怎么实现原型和原型链,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。原型Javascript中有一句话,叫一...
    99+
    2022-10-19
  • 详解JavaScript中的原型和原型链
    目录原型链图原型必备知识prototype属性(显示原型)proto属性(隐式原型)constructor属性总结 原型链图 原型必备知识 要了解原型就必须搞清三个属性:__pro...
    99+
    2022-11-12
  • javascript的构造函数, 原型,原型链和new是什么
    这篇“javascript的构造函数, 原型,原型链和new是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j...
    99+
    2023-06-29
  • JavaScript中的原型和原型链怎么理解
    这篇文章主要介绍“JavaScript中的原型和原型链怎么理解”,在日常操作中,相信很多人在JavaScript中的原型和原型链怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-19
  • JavaScript原型链指的是什么
    这篇文章主要为大家展示了“JavaScript原型链指的是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript原型链指的是什么”这篇文章吧。1...
    99+
    2022-10-19
  • JavaScript的继承和原型链是什么
    小编给大家分享一下JavaScript的继承和原型链是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言JavaScri...
    99+
    2022-10-19
  • 深入了解javascript原型和原型链
    目录一、什么是原型二、prototype三、__proto__四、constructor五、实例与原型六、原型的原型七、原型链一、什么是原型 原型:每一个javascript对象(除...
    99+
    2022-11-12
  • JavaScript 原型与原型链详情
    目录1、prototype(显式原型)2、__proto__(隐式原型)3、constructor(构造函数)4、new的原理5、原型链5.1 原型链的作用5.2 构造函数的__pr...
    99+
    2022-11-12
  • Javascript中面向对象和原型原型链是怎样的
    今天就跟大家聊聊有关Javascript中面向对象和原型原型链是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。面向对象理论知识总述* 核心答案...
    99+
    2022-10-19
  • Javascript的原型和原型链你了解吗
    目录一、为什么要使用原型?怎样去理解原型的出现1、对象字面量创建对象的缺点2、工厂函数3、构造函数二、使用原型三、原型概念辨析四、原型链练习总结一、为什么要使用原型?怎样去理解原型的...
    99+
    2022-11-13
  • es6中什么是原型链
    本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。什么是原型?在JS中,每个函数在被创建的时候就会有一个 prototype属性,这个属性是一个指针,指向一个对象,而这个对象就是这个函数的原型对象(...
    99+
    2022-11-22
    ES6 原型链 javascript
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作