原型与原型链

作者: 养乐多__ | 来源:发表于2019-04-01 12:18 被阅读4次

一、公用属性(原型)

公用属性意义:不重复声明一样的属性,不浪费内存。

  1. 理解公用属性
    (1)以对象为例: var o = new Object(),对象只存自己的 key(属性),共有的属性不存,而是用 __proto__ 去指向共有属性。内存图展示:
    Object 公用属性内存图 代码展示: Object 共用属性举例
    (2)以 Number 为例:var n = new Number(1) ,以下几个属性是只有 Number 类才共有的属性:

toFixed:确定有几位小数
toExponential:科学计数法
toString(16):Number 的 toString 接受参数(进制),与Object 的不同

内存图展示:

Number 公用属性内存图 代码展示: Number 公用属性举例
(3)其他类也是这样,先通过__proto__先指向自己这一类的共有属性,再通过__proto__指向 Object 的共有属性,形成一条原型链,如下图所示:
原型
  1. 共用属性放在哪
  • String.prototype 是 String 的公用属性的引用(一直存在)
    s.__proto__ 是 String 的公用属性的引用(使用这个属性)
  • 公用属性也是哈希,不被引用时会被垃圾回收,所以即使不写代码,也一直是被引用的状态,prototype 一直存在。 共有属性引用

二、__proto__prototype

  1. 语法形式
var 对象 = new 函数()
// 例:var n = new Number()
对象.__proto__ === 函数.prototype
//例: n.__proto__ === Number.prototype
  • 区别__proto__是对象的属性,prototype 是函数的属性;
    但二者指向同一个对象,存的地址是相同的。
  • 易错题
    '1'.__proto__ 是什么?
    因为基本类型是没有属性的,'1'会临时变成一个 String 对象(new String()),所以指向指向函数的属性String.prototype.
  1. 推论
    对象.__proto__ === 函数.prototype知,对象的__proto__指向构造它的函数的prototype,我们由此推论出:
  • 函数的 prototype 是个简单的对象,是由 Object 构造出来的:
函数.prototype.__proto__ === Object.prototype
  • 函数作为一个对象,是由 Function 构造出来的:
函数.__proto__ === Function.prototype
  • function 优先是个函数(也是对象),函数是由 Function 构造出来的:
Function.__proto__ === Function.prototype
  • Function 作为一个函数,它有 prototype
Function.protoype.__proto__ === Object.prototype
  • 另外:
    Function 是 Object 的构造函数,所以:
    Object.__proto__ === Function.prototype
    Object 的公用属性是所有函数公用属性的根节点,它指向 null.
    Object.prototype.__proto__ === null

相关文章

  • 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/tszmbqtx.html