2023年了要怎么理解原型和原型链

这篇具有很好参考价值的文章主要介绍了2023年了要怎么理解原型和原型链。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.prototype和__proto__有什么不可告人的关系?

说道原型对象,那一定绕不开几个概念:
prototype,__proto__,constructor。

首先解释一下prototype是什么,原型对象。V8引擎给所有函数内置的一个对象。也就是只要创建的了一个函数(类也算,因为类的本质也是函数)。那么这个函数就会携带一个原型对象prototype。

再来说一下__proto__,不管是函数还是对象,都具有__proto__这个属性。现在,我来带给你一个非常牛逼的万能公式,来说明__proto__和prototype之间的关系

不管函数还是对象的__proto__,一定等价于对应实例化的类的原型对象。

2023年了要怎么理解原型和原型链

什么意思,我现在举个例子:

function People(name){
  this.name = name
}
let p1 = new People();

let arr = new Array();
let obj = new Object();

现在我有三个对戏,p1(通过People类实例化出来的),arr(通过Array类实例化出来的),obj(通过Object类实例化出来的)。

那么我可以说:

p1.__proto__ === People.prototype;
arr.__proto__ === Array.prototype;
obj.__proto__ === Object.prototype;

那有人就会说了,你这不全面。不只是对象才有__proto__属性啊;函数的__proto__怎么算呢?

OK,对于上面的People类来说,如果我换一种写法!!!!!如下:

let People = new Function('name','this.name = name')

是不是一下就通透了,就完美。完全可以说People是通过Function类实例化出来的,所以!!!

People.__proto__ === Function.prototype;
Array.__proto__ === Function.prototype;
Object.__proto__ === Function.prototype;

除了实例化对象和函数,是否还有其他的什么东西具有__proto__属性呢?

还有一个特例,就是prototype。我们知道原型对象是创建函数的时候,V8给带出来的,但我们管它是谁带出来的呢?原型对象原型对象,原型对象还是对象,是对象就是Object实例化出来的,所以:

People.prototype.__proto__ === Object.prototype

如果推到这里,你就会发现,如果Object.prototype也指向Object的原型对象。那么原型链就没头了,所以:

Object.prototype.__proto__ === null

现在,对于原型链和原型对象,是不是非常通透。赶紧去控制台试试,记住上面最重要的公式:

不管函数还是对象的__proto__,一定等价于对应实例化的类的原型对象!!!

2.constructor又在这里面搞什么飞机

对于constructor,和prototype,__proto__之间的关系。并不能像上面那样找到一个比较明确的公式。

2023年了要怎么理解原型和原型链
所以,这里我们针对于不同情况下,列出不同事物的constructor和事物的prototype或者__proto__之间的对应关系。反正也不多,就简单记一下好了。

(1)对象的constructor:

对象的constructor等价于,对应实例化类的本身:
[].constructor === Array

(2)函数的constructor:

函数的constructor等价于,Function:
Array.constructor === Function

(3)prototype的constructor

prototype的constructor等价于,对应函数的本身:
Array.prototype.constructor === Array

(4)__proto__的constructor

__proto__的constructor等价于,对应实例化类的本身:
[].__proto__.constructor === Array

对于上面的公式,可别来一个数学上的等价关系奥。比如由第一条和第四条,你来一个交换律:
[] === [].__proto__
这可不兴交换奥,只能说明二者共用了一个constructor,并不能说明二者是一个东西奥。文章来源地址https://www.toymoban.com/news/detail-497596.html

到了这里,关于2023年了要怎么理解原型和原型链的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是原型链(Prototype Chain)?它在JavaScript中有什么作用?请解释一下JavaScript中的“this”关键字的含义和用法。

    原型链(Prototype Chain)是一种在JavaScript中创建对象的方式,它允许我们通过继承来扩展对象的属性和方法。 在原型链中,每个对象都有一个原型对象(也称为“原型”或“ proto ”),该对象继承了其父对象的属性和方法。当我们在一个对象上定义一个属性或方法时,如果该

    2024年02月11日
    浏览(57)
  • 【ES6】js中的__proto__和prototype

    在JavaScript中,__proto__和prototype都是用于实现对象继承的关键概念。 1、 proto __proto__是一个非标准的属性,用于设置或获取一个对象的原型。这个属性提供了直接访问对象内部原型对象的途径。对于浏览器中的宿主对象和大多数对象来说,可以使用 obj. proto 访问它们的原型对象

    2024年02月10日
    浏览(29)
  • 【设计模式】腾讯面经:原型模式怎么理解?

    什么是原型模式? 设计模式是编程世界的基石,其中原型模式无疑是一种常用而又高效的创建对象的手段。那么,什么是原型模式呢?又该如何去实现它? 在软件工程中,原型模式是一种创建型设计模式。我们可以这样理解: 如果创建一个新的对象成本较高,原型模式允许

    2024年01月25日
    浏览(33)
  • js--prototype(原型)

    在JavaScript中,prototype是每个函数对象都具有的一个特殊属性。它是一个指向原型对象的引用,通过这个属性,函数与其创建的对象建立了连接。 原型对象是一个普通的对象,它包含了共享给由该构造函数创建的所有实例的属性和方法。当我们通过某个构造函数创建新对象时

    2024年02月15日
    浏览(71)
  • 原型模式(Prototype)

    原型模式是一种创建型设计模式,使调用方能够复制已有对象,而又无需使代码依赖它们所属的类。当有一个类的实例(原型),并且想通过复制原型来创建新对象时,通常会使用原型模式。 原型模式包含如下角色: Prototype,原型类,用来声明克隆方法。在绝大多数情况下

    2024年02月14日
    浏览(43)
  • 5 原型模式 Prototype

    指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 当代码不应该依赖于需要复制的对象的具体类时,请使用Prototype模式。 Spring源码中的应用   1.可以不耦合具体类的情况下克隆对象 2.避免重复的初始化代码 3.更方便的构建复杂对象

    2024年02月22日
    浏览(42)
  • 原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)结构较为简单,它是一种特殊的创建型模式, 当需要创建大量相同或者相似对象时 ,可以 通过对一个已有对象的复制获取更多对象 。Java语言提供了较为简单的原型模式解决方案,只需要创建一个原型对象,然后通过在类中定义的克隆方法复制自己

    2024年02月03日
    浏览(38)
  • 原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)是一种创建型设计模式,它用于通过复制现有对象来创建新对象,而无需依赖显式的构造函数。 在原型模式中,我们创建一个原型对象,并通过复制该原型对象来创建新的对象。这样做的好处是,我们可以避免创建对象时的复杂实例化过程,而是通

    2024年02月15日
    浏览(44)
  • proto-neural-zkp:Plonky2 + Numpy 构建的神经网络原型

    https://github.com/worldcoin/proto-neural-zkp(Rust + Python)为Worldcoin团队基于Plonky2证明系统构建的卷积神经网络CNN评估原型。 Worldcoin为具有隐私保护功能的Proof-of-Personhood协议。借助ZKML可使其成为trustless、更易于升级和审计的协议: 验证某用户已创建了一个有效且唯一的WorldID——通过

    2024年02月16日
    浏览(45)
  • 设计模式—原型模式(Prototype)

    目录 一、什么是原型模式? 二、原型模式具有什么优缺点吗? 三、有什么缺点? 四、什么时候用原型模式? 五、代码展示 ①、简历代码初步实现 ②、原型模式 ③、简历的原型实现 ④、深复制 ⑤、浅复制 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包