Javascript-原型与原型链

作者: YS909090 | 来源:发表于2019-05-05 09:12 被阅读0次

简单介绍

JavaScript 每个对象都拥有一个原型对象,对象以其原型为模板从原型中继承方法和属性;

原型对象也可能拥有原型,并从中继承方法和属性;一层一层、以此类推,而由这种关系组成的一条链,我们常称为原型链。

准确地说,这些属性和方法定义在 Object 的构造器函数 constructor 的prototype属性上,而非对象实例本身。

原型

在javascript中,函数可以有属性。并且每个函数都有一个特殊的属性[[Prototype]]叫作原型。

-所有的引用类型(函数,数组,对象),都有一个__proto__的属性, 我们习惯称之为隐式原型;(__proto__并不是规范属性,只是部分浏览器实现了此属性)

-所有的函数都具有一个prototype的属性,我们习惯称之为显式原型;

  • 所有的引用类型(函数,数组,对象),其 __proto__ 属性都指向其构造函数的 prototypeobj.__proto__ === Object.prototype);

-拥有prototype属性的对象,在定义函数时就被创建(原型对象)。


function Foo() {}

const foo = new Foo()

foo.__proto__ === Foo.prototype // true

原型链

原型链就是原型的集合,一级一级地往上查找,直到 Object 的原型对象的原型(null);


function Foo() {}

const foo = new Foo()

Object.prototype.test = function() {}

console.log(foo.test) // ƒ () {}

// 此时访问 foo 的 test 方法的历程是

foo.__proto__ === Foo.prototype // true

Foo.prototype.__proto__ === Object.prototype // true

foo.test === Object.prototype.test

Foo.__proto__ === Function.prototype // true

Function.prototype.__proto__ === Object.prototype // true

Object.prototype.__proto__ === null // true

Function.__proto__ === Function.prototype // true

从上面我们可以看出,函数对象的 __proto__ 指向 Function.prototype

与此相同的还有:


Number.__proto__ === Function.prototype  // true

Number.constructor === Function //true

Boolean.__proto__ === Function.prototype // true

Boolean.constructor === Function //true

String.__proto__ === Function.prototype  // true

String.constructor === Function //true

Object.__proto__ === Function.prototype  // true

Object.constructor === Function // true

Function.__proto__ === Function.prototype // true

Function.constructor === Function //true

Array.__proto__ === Function.prototype  // true

Array.constructor === Function //true

RegExp.__proto__ === Function.prototype  // true

RegExp.constructor === Function //true

Error.__proto__ === Function.prototype  // true

Error.constructor === Function //true

Date.__proto__ === Function.prototype    // true

Date.constructor === Function //true

相关文章

  • Javascript-原型与原型链

    简单介绍 JavaScript 每个对象都拥有一个原型对象,对象以其原型为模板从原型中继承方法和属性; 原型对象也...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • 2019-01-28

    原型与原型链

  • JavaScript-原型链

    1.prototype 在讨论prototype之前先看一段代码: 我们用构造函数创建了2个实例对象,两者都有相同...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • Javascript(三)之原型继承理解

    进阶路线 3 原型继承 3.1 优秀文章 最详尽的 JS 原型与原型链终极详解 一 最详尽的 JS 原型与原型链终...

  • JavaScript 面向对象第一篇

    1.原型链 ---- (实例对象与原型之间的连接 叫做原型链) 2. hasOwnproperty ----(看是...

  • 原型与原型链以及继承

    今天复习下原型与原型链的知识,以及记录新学的继承知识点。 知识点纲要 原型与原型链 es5与es6继承 什么是原型...

  • JavaScript深入理解this关键字(一)

    摘要 最近在公司需要做培训,我打算把JavaScript中的原型与原型链讲给大家。但我在梳理原型与原型链的时候发现...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

网友评论

    本文标题:Javascript-原型与原型链

    本文链接:https://www.haomeiwen.com/subject/yrzqoqtx.html