原型与原型链

作者: YukiWeng | 来源:发表于2019-07-01 15:32 被阅读3次

一、概念

原型
在JavaScript中,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype属性,这个属性指向函数的原型对象,并且这个属性是一个对象数据类型的值。
原型链
对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链。

二、浅析

当我们声明对象时,js 会在栈里生成对象现有属性,并将__proto__指向原型

如图

1.当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,找到则直接使用
2.若未找到,则去原型对象中寻找,找到则直接使用。
3.若仍未找到,则去原型的原型中寻找,直到找到Object原型。
4.如果在Object原型中依然没有找到,则返回undefined。

String Number Boolean 与 Object 不同
Object比其它三种类型的寻找次数少一次

String :自身属性 -> String原型 -> Object原型
Object:自身属性 -> Object原型

var o1={}
o1.__proto__===Object.prototype //true

var n1=new Number(1)
n1.__proto__===Number.prototype //true
n1.__proto__.__proto__===Object.prototype //true
// String Boolean 也类似
var o1=new Object()
var o2=new Object()
01===02 // false
01.toString===02.toString //true 因为toString是共用属性

prototype__proto__

prototype是window默认存在的,比如:
String.prototype 是 String 原型的引用(默认存在,不写代码也有。指向String原型,防止原型被浏览器回收)

var s=new String('11')
s.__proto__ 也是是 String 原型的引用(写了代码后才有)

对象.__proto__ === 对象的构造函数.prototype
两者的区别是:__proto__是对象的属性,prototype是函数的属性


概念解释参考:原型与原型链详解

相关文章

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

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

  • 2019-01-28

    原型与原型链

  • 廖雪峰JS小记

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

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

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

  • JavaScript 面向对象第一篇

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

  • 原型与原型链以及继承

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

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

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

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

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

  • 原型链&instanceof关键字

    1.原型链&instanceof关键字 简单说明 原型链 与 instanceof 作用原理 1.原型链 1...

  • 原型、原型链

    (什么是原型、原型链?有什么作用) JavaScirpt深入之从原型到原型链 图解 Javascript 原型链 ...

网友评论

    本文标题:原型与原型链

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