js prototype和__proto__的关系是什么

 更新时间:2019年08月23日 15:53:43   作者:萧浅姑娘  
这篇文章主要介绍了js prototype和__proto__的关系是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就是一个对象。)

function是对象,function的原型prototype也是对象,它们都会具有对象共有的特点。即:对象具有属性__proto__,每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样 一直找下去,也就是我们平时所说的原型链的概念。__proto__可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

funcition这个特殊的对象,除了和其他对象一样有上述_proto_属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。prototype是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。

ptototype和__proto__联系

prototype和__proto__都指向原型对象,任意一个函数(包括构造函数)都有一个prototype属性,指向该函数的原型对象,同样任意一个构造函数实例化的对象,都有一个__proto__属性(__proto__并非标准属性,ECMA-262第5版将该属性或指针称为[[Prototype]],可通过Object.getPrototypeOf()标准方法访问该属性),指向构造函数的原型对象。---sinのstone

ptototype和__proto__区别

//a作为构造函数时的prototype属性与a作为普通函数时的__proto__属性并不相等
console.log(a.prototype == a.__proto__);//false

console.log(a.__proto__);     //function (){}
console.log(a.__proto__ == Function.prototype);//true

//a作为一个普通函数调用时,它的构造函数是内置对象Function,所以它指向的原型对象,就是Function.prototype.
//其实这个和console.log(b.__proto__ == a.prototype)是一样的道理

//a作为构造函数时,它的原型,和它的原型的原型
console.log(a.prototype);          //a{}
console.log(a.prototype.__proto__); //Object{}

//a作为普通函数时,它原型的原型
console.log(a.__proto__.__proto__); //Object{}

console.log(a.__proto__.__proto__ == a.prototype.__proto__); //true

所有对象都有__proto__属性,函数这个特殊对象除了具有__proto__属性,还有特有的原型属性prototype。prototype对象默认有两个属性,constructor属性和__proto__属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于javascript实现图片预加载

    基于javascript实现图片预加载

    这篇文章主要介绍了javascript图片预加载的方法,实例分析了javascript实现图片预加载的思路,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-01-01
  • innerText和textContent对比及使用介绍

    innerText和textContent对比及使用介绍

    innerText使用过程中遇到了FireFox的兼容问题FireFox不支持innerText方法但是有个类似的方法,叫textContent,类似innerText,都是用来获取(设置)元素中text的方法,感兴趣的朋友可以参考下
    2013-02-02
  • 浅谈JavaScript的闭包函数

    浅谈JavaScript的闭包函数

    闭包是有权访问另一个函数作用域中的变量的函数。首先要明白的就是,闭包是函数。由于要求它可以访问另一个函数的作用于中的变量,所以我们往往是在一个函数的内部创建另一个函数,而“另一个函数”就是闭包。本文对其进行系统分析,需要的朋友可以看下
    2016-12-12
  • IE6浏览器中window.location.href无效的解决方法

    IE6浏览器中window.location.href无效的解决方法

    这篇文章主要介绍了IE6浏览器中window.location.href无效的解决方法,给出了正确与错误的实例对比,分析跳转无效的原因与解决方法,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • 纯JS实现的读取excel文件内容功能示例【支持所有浏览器】

    纯JS实现的读取excel文件内容功能示例【支持所有浏览器】

    这篇文章主要介绍了纯JS实现的读取excel文件内容功能,结合实例形式分析了基于js相关插件进行Excel文件读取的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • JavaScript基于DOM操作实现简单的数学运算功能示例

    JavaScript基于DOM操作实现简单的数学运算功能示例

    这篇文章主要介绍了JavaScript基于DOM操作实现简单的数学运算功能,涉及javascript节点操作、元素遍历及数学运算相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • js获取浏览器和屏幕的各种宽度高度

    js获取浏览器和屏幕的各种宽度高度

    本文主要介绍了js获取浏览器和屏幕的各种宽度高度的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • js实现在网页上简单显示时间的方法

    js实现在网页上简单显示时间的方法

    这篇文章主要介绍了js实现在网页上简单显示时间的方法,实例分析了javascript实时显示时间的技巧,需要的朋友可以参考下
    2015-03-03
  • JS和jQuery使用submit方法无法提交表单的原因分析及解决办法

    JS和jQuery使用submit方法无法提交表单的原因分析及解决办法

    这篇文章主要介绍了JS和jQuery使用submit方法无法提交表单的原因分析及解决办法的相关资料,需要的朋友可以参考下
    2016-05-05
  • 如何使用less实现随机下雪动画详解

    如何使用less实现随机下雪动画详解

    这篇文章主要给大家介绍了关于如何使用less实现随机下雪动画的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01

最新评论