首页
学习
活动
专区
工具
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__向上进行查找

    78910

    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。 ?

    57540

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

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

    53110

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

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

    12510

    「转」javascriptprototype

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

    58340

    JavaScriptprototype用法

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

    48420

    Javascript原型原型

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

    852101

    JavaScript原型原型

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

    35520

    深入理解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语言是基于原型,那么原型到底是什么呢?

    83180

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

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

    24440

    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

    38710

    原型原型prototype和proto区别

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

    40730

    图解 JavaScript 原型原型

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

    90520

    javascriptprototype__proto__

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

    24510

    JavaScript为何要使用prototype

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

    33410
    领券