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

JavaScript中[[Prototype]]与原型的关系

在JavaScript中,[Prototype]是一个内部属性,它是每个对象都具有的一个隐式属性,用于指向创建该对象的构造函数的原型对象。而原型(prototype)是一个构造函数的属性,它是一个对象,用于为构造函数创建的实例提供共享属性和方法。

[Prototype]和原型之间的关系是:[Prototype]指向的对象就是该对象的原型。也就是说,当我们访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着[Prototype]链向上查找,直到找到具有该属性或方法的对象或者到达null为止。

在JavaScript中,继承是通过原型链实现的。当我们创建一个新的对象时,它的[Prototype]属性会指向创建它的构造函数的原型对象。因此,我们可以通过修改构造函数的原型对象来为所有实例提供共享属性和方法。

总之,[Prototype]和原型是JavaScript中实现对象继承和共享属性方法的两个重要概念。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理解js中的原型链,prototype与__proto__的关系

即:对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。...1.构造函数Foo() 构造函数的原型属性Foo.prototype指向了原型对象,在原型对象里有共有的方法,所有构造函数声明的实例(这里是f1,f2)都可以共享这个方法。...那么当我们调用p.Say()时,首先p中没有Say这个属性, 于是,他就需要到他的__proto__中去找,也就是Person.prototype,而我们在上面定义了 Person.prototype.Say...__proto__,也就是 Programmer.prototype,也就是p1中去找,由于p1中也没有Say,那就去p.__proto__....最后,其实prototype只是一个假象,他在实现原型链中只是起到了一个辅助作用,换句话说,他只是在new的时候有着一定的价值,而原型链的本质,其实在于__proto__!

1.2K80
  • JavaScript原型和原型链( prototype 与 __proto__ )

    属性的对象,在定义函数时就被创建 关于 prototype 与__proto__ js中所有的函数都有一个 prototype 属性,该属性引用了一个对象,即原型对象,也简称原型 js对象有一个...任何一个函数,只要被 new 操作符使用,就可以是一个构造函数(构造函数建议以大写开头) 另外,在 JavaScript 的内置对象中,所有的函数对象都是 Function 构造函数的实例,比如:Object...__proto__ === Demo.prototype 当调用某种方法或查找某种属性时,首先会在自身调用和查找,如果自身并没有该属性或方法,则会去它的__proto__属性中调用查找,也就是它构造函数的... prototype 中调用查找。...b, 向上查找过程中,得到的是 Object.prototype,而不是 Function.prototype,找不到a属性, 所以结果为 undefined,这就是原型链,通过__proto__向上进行查找

    79610

    JavaScript原型模式(prototype)

    1.原型是一个对象,其他对象可以通过它实现属性的继承 所有对象在默认的情况下都有一个原型,因为原型的本身也是对象, 所以一个类的真正原型是被类的内部[prototype]属性所指出。...JavaScript中的原型(prototype)是和函数(function紧密相连的) var o={} 他不是有用function他有原型吗?...方法为,让空类的对象所持有的原型的索引(__proto__)变成function类所持有的原型的索引(prototype)。 var b={};//空类 b....__proto__=per.prototype;//让空类 的对象所持有的原型的索引(__proto__)变成function类所持有的原型的索引(prototype) 原型链 上级对等 【此时为类的索引...__proto__.constructor=b;//只是改变构造函数 说明一下,此时为类b除去构造函数外继承与类per。 ?

    57840

    详解JavaScript的继承和原型链(prototype)

    JavaScript 的每个实例对象都有一个指向上一层对象的私有属性(称之为 __proto__) ,上一层对象又指向再上一层对象,就这样层层向上直至 __proto__ 属性为 null ,最后这个对象就是...o)); 2、prototype 与 Object.getPrototypeOf 两者功能一致,都是用来访问原型属性,区别是: prototype 用于类,而 Object.getPrototypeOf...hasOwnProperty 是 JavaScript 中唯一一个不会遍历原型链的方法。...2、错误实践 扩展内置原型会破坏封装,这不是好的解决方案,使用扩展内置原型的唯一理由是支持 JavaScript 引擎的新特性,如 Array.forEach。...原生原型不应该被扩展,除非它是为了与新的 JavaScript 特性兼容。 五、参考文档 详解JavaScript的继承和原型链(prototype)

    54010

    JavaScript OOP(三):prototype原型对象(即构造函数的prototype属性)

    我们可以看出所有实例化对象(即o1,o2)中的func()都相同。...但是每个对象都新建了func()方法,显得多余且浪费资源 为了解决上述问题,就要用到JavaScript的prototype对象:起到共享某些相同属性和方法的作用!...JavaScript的对象都继承自"原型"对象(与java、c++中类相似的作用);除了null,null没有自己的原型 JavaScript原型设计机制:原型上面的属性和方法,都能够被子对象共享 1...=new Array();//O5的prototype属性等于new Array();那么O5的实例化对象共享着Array对象的所有属性和方法,并且O5.prototype的constructor也与Array.prototype...总结: JavaScript的继承机制主要是基于prototype的。

    1.1K70

    JavaScript难点:原型、原型链、继承、new、prototype和constructor

    原型 原型(prototype)是 JavaScript 中对象的一个特殊属性,它用于实现属性和方法的继承。...原型链 任何一个实例,通过原型链,都能找到它上面的原型,该原型对象中的方法和属性,可以被所有的原型实例共享,原型对象中依然有它自身的原型,当我们访问一个实例属性或方法时,如果自身没有,就会一级一级地去原型对象上找...继承 JavaScript 不像 Java、C++ 这种纯面向对象的语言,可以通过类实现继承,JavaScript中的继承是通过原型实现的,即使 ES6 中新增的 class 类也只是原型的语法糖而已。...当我们 new 的时候实际会调用内部的 constructor 构造函数,会做以下4步: 新建一个对象 将对象的原型指向构造函数的 prototype 绑定 this,执行构造函数中的代码 返回对象...prototype:显示原型,函数才有的 __proto__:隐式原型,实例对象才有的,在浏览器中可以通过这个访问对象的原型,不过 Mozilla 推荐使用 Object.getPrototypeOf

    13310

    「转」javascript中的prototype

    但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于‘类的',而是通过构造函数(constructor)和原型链(prototype chains)实现的...属性的作用 6.instanceof运算符 1.构造函数的简单介绍 在我的一篇Javascript 中构造函数与new命令的密切关系文章中,详细了介绍了构造函数的概念和特点,new命令的原理和用法等,如果对于构造函数不熟悉的同学...(boy)) //true 原型链(prototype chain)的特点有: a:读取对象的某个属性时,JavaScript引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找...e:由于constructor属性是一种原型对象和构造函数的关系,所以在修改原型对象的时候,一定要注意constructor的指向问题。...以上所述是小编给大家介绍的详解Javascript中prototype属性(推荐)的相关知识,希望对大家有所帮助。

    58840

    JavaScript中prototype用法

    prototype属性的作用 JavaScript的每个对象都继承另一个对象,后者称为“原型”(prototype)对象。只有null除外,它没有自己的原型对象。...原型对象上的所有属性和方法,都能被派生对象共享。这就是JavaScript继承机制的基本设计。 通过构造函数生成实例对象时,会自动为实例对象分配原型对象。...由于JavaScript的所有对象都有构造函数,而所有构造函数都有prototype属性(其实是所有函数都有prototype属性),所以所有对象都有自己的原型对象。...“原型链”的作用是,读取对象的某个属性时,JavaScript引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找。...由于constructor属性是一种原型对象与构造函数的关联关系,所以修改原型对象的时候,务必要小心。

    49020

    Javascript的原型与原型链

    一、原型与原型链的定义 原型:为其他对象提供共享属性的对象     注:当构造器创建一个对象,为了解决对象的属性引用,该对象会隐式引用构造器的"prototype"属性。...程序通过constructor.prototype可以直接引用到构造器的"prototype"属性。并且添加到对象原型里的属性,会通过继承与所有共享此原型的对象共享。...再者,原型可能有一个非空隐式引用链接到它自己的原型,以此类推,这叫做 原型链 二、ES5中的Function与Object类型 理解Function与Object类型的之间的关系,对我们理解原型和原型链有很重要的帮助...与Object存在相互引用的关系,以及其他特点总结如下: Function.prototype.proto === Object.prototype:Function的原型的原型链等于Object的原型...Object.prototype.proto === null:Object的原型的原型链为null 关系图: ?

    861101

    【JavaScript】原型与原型链

    默认情况下,所有原型对象都会自动获得一个名为constructor的属性,指回与之关联的构造函数。...JavaScript中没有访问这个[[prototype]]特性的标准方式,但Firefox、Safari、Chrome会在每个对象上暴露_proto_属性,通过这个属性可以访问对象的原型。...在其他实现中,这个特性完全被隐藏了。关键在于理解这一点:实例与构造函数原型之间有直接的联系,但实例与构造函数之间没有。...()可以方便的获取一个对象的原型,而这在通过与原型实现继承时显得尤为重要(本章后面会介绍)。...(person,biped); console.log(person.biped);// 2,通过Object.setPrototypeOf为person的原型对象写入了新的值 但是不推荐这样做,因为修改了原型会间接修改了继承关系

    36220

    深入理解JavaScript原型:prototype,__proto__和constructor

    本文结合笔者开发工作中遇到的问题详细讲解JavaScript原型的几个关键概念,如有错误,欢迎指正。 1. JavaScript原型继承 提到JavaScript原型,用处最多的场景便是实现继承。...构造函数的prototype指向其所属类的原型对象,一个类的原型对象初始值是与类同名的,比如: function Animal(){} Console.log(Animal.prototype); 输出结果为...__proto__属性除了null以外的对象都具备的一个属性,其指向与构造函数的prototype相同。...并非所有JavaScript引擎都支持__proto__属性的访问和修改,通过修改__proto__改变原型并不是一种兼容性方案。最新的ES6规范中,__proto__被规范为一个存储器属性。...原型到底是什么? JavaScript的诞生只用了10天,但是需要10年甚至更久的时间去完善。JavaScript语言是基于原型的,那么原型到底是什么呢?

    84080

    《现代Javascript高级教程》JavaScript中的原型与继承

    不同于传统的基于类的继承,JavaScript的类和继承是基于原型链模型的。在ES2015/ES6中引入了class关键字,但其本质仍然是基于原型链的语法糖。...原型(Prototype) 原型(Prototype)是JavaScript中对象的一个特殊属性,它用于实现属性和方法的继承。...原型链的概念可以通过以下方式解释:在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]](__proto__),它指向该对象的原型。...通过 Object.create() 方法,我们将子对象的原型连接到父对象的原型上,建立了子对象和父对象之间的原型链关系。...原型继承 原型继承是一种通过继承原型对象来创建新对象的方式。在 JavaScript 中,我们可以使用多种方式实现原型继承。

    24740

    原型和原型链 prototype和proto的区别

    原型 原型是function对象下的属性,它定义了构造函数的共同祖先,也就是一个父子级的关系,子对象会继承父对象的方法和属性 prototype是函数下的属性,对象想要查看原型使用隐式属性__Proto...__属性,通过属性__proto__指向构造函数的原型对象,当到达末端时,返回null,这样一层一层向顶端查找,就形成了原型链 prototype是函数特有的,__proto__是对象有的,js中万物皆对象...prototype和——proto——区别与作用 prototype把共有属性预先定义好,给之后对象使用 prototype的存在实现了继承,节省内存空间 __proto__是对象的,prototype...一般情况下,对象的方法都在构造函数的原型对象中设置。...此时,我们可以在修改后的原型对象中,添加一个 constructor 指向原来的构造函数。

    41230

    JavaScript 中的 __proto__ 和 prototype

    对象的__proto__指向自己构造函数的prototype。obj.__proto__.__proto__...的原型链由此产生,包括我们的操作符instanceof正是通过探测obj....__proto__... === Constructor.prototype来验证obj是否是Constructor的实例。 原型链的尽头(root)是Object.prototype。...先有Object.prototype(原型链顶端),Function.prototype继承Object.prototype而产生,最后,Function和Object和其它构造函数继承Function.prototype...prototype 每个函数都有一个属性叫做prototype,这个prototype的属性值是一个对象(属性的集合),默认的只有一个叫做constructor的属性,指向这个函数本身。...prototype 作为一个对象是可以塞很多属性和方法的。 __proto__ 每个对象都有一个隐式原型。每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。

    38910

    图解 JavaScript 原型与原型链

    原型在平时工作中用得比较少, 但原型是 JavaScript 中的基础, 是构建大型应用, 框架不可或缺的一环, 是你在写代码时, 不知不觉就应用上了的一个最基础的知识....比如, React 和 Vue 的 git 仓库中, prototype 被使用到的次数分别为 370 次和 1043 次....就好像每个函数的原型, 是由 new Object() 产生一样 以上就是关于原型的阐述, 如果看到这里似懂非懂, 建议反复看几遍, 注意文字与图片对应, 线条的指向, 看懂了再接着往下看....原型链 原型链是 JavaScript 作者为了继承而设计的, 由上边的分析, const foo = new Foo() 语句, 其实是产生了一个链条的, 如下: ?...这就是原型链, 我们也可以说, Foo 继承了 Object, 所以 foo 中能访问到 Object 的原型属性. 原型链的内容就到这里, 更多关于继承的内容, 会在下一篇讲解.

    91020

    JavaScript中为何要使用prototype

    在JavaScript学习和工作中,或多或少会接触一些底层的JavaScript知识。...比如下面四个基本概念: 1.prototype 2.this关键字 3.原型继承 4.JavaScript闭包 个人觉得的看得越多,技术好像也越来越复杂。...JavaScript不是真正的面向对象(oop),但是很多开发者尝试使用编写Java/C#的方法去编写JavaScript代码,一方面是容易理解,另一方面也是后期代码中更容易维护,更容易调试等方便。...prototype的出现是为了解决在传统代码中,我们每创建一个对象实例,每个实例都会有重复的方法,这样在创建数量较多的对象实例时,代码冗余,占用内存多。所以将对象的方法放到类中。称为:类拥有的方法。...通过引入prototype,可以用改进代码,将对象实例的三个共有方法使用prototype添加到“类”Blog中。

    33610

    javascript 之 prototype与__proto__

    首先,先介绍一个今天的主角:proto(隐式原型)与prototype(显式原型) 什么是__proto__和prototype?...prototype(显式原型) 在每一个函数(请注意是函数)创建之后都会有一个叫prototype的属性,这个属性指向的是函数的原型对象。...__proto__(隐式原型) javascript 中任意对象都具有一个内置属性,在ES5之前并没有标准的方法访问这个属性,但是在绝大多数浏览器中都支持通过__proto__来访问这个属性,我们叫他隐式原型...__proto__ === Foo.prototype; //=>true 由上面我们可以看出函数foo的隐式原型指向其构造函数的显式原型....ok,最后总结一下 1.对象有属性__proto__,指向该对象的构造函数的原型对象。 2.方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象。

    25110
    领券