美文网首页
浅谈原型与原型链

浅谈原型与原型链

作者: kiterumer | 来源:发表于2019-04-04 11:52 被阅读0次
原型与原型链

全局对象window

ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象(浏览器先存在的)
window 就是一个哈希表,有很多属性。window 的属性就是全局变量。
这些全局变量分为两种:

  1. 一种是 ECMAScript 规定的

    • global.parseInt
    • global.parseFloat
    • global.Number
    • global.String
    • global.Boolean
    • global.Object
  2. 一种是浏览器自己加的属性

    • window.alert(弹框提示)
    • window.prompt(用户填写)
    • window.confirm (用户确认)
    • window.console(开发者调试)
    • window.document(文档)
      window.document.createElement
      window.document.getElementById
    • window.history(浏览器历史对象)

所有API都可以在MDN上找到详细的资料。

ctrl + shift + j 进入控制台,输入·window`按回车,可以一睹window的真容。

全局函数

  • Number
var n = new Number(1) //创建一个Number对象

同理,String,Boolean,Object都用同样的结构创建对象。即构造函数,构造对象的函数。
问题:1 与 new Number(1)有何区别?可以画内存图理解。前者利用栈内存,后者利用堆内存。

公用的属性在哪

所有对象都有 toString 和 valueOf 属性,那么我们是否有必要给每个对象一个 toString 和 valueOf 呢?

明显不需要。

JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象)

然后让每一个对象的 proto 存储这个「公用属性组成的对象」的地址。

var obj = { name : yyy }
yyy.__proto__ === Object.prototype.

Object.prototype即包含对象公用属性的原型.
同理

var num = new Number(1)
num.__proto__ = Number.prototype
num.__proto__.__proto__ = Object.prototype

重要公式

var 对象 = new 函数()
对象.__proto__ === 对象的构造函数.prototype

推论

var number = new Number()
number.__proto__ = Number.prototype


var object = new Object()
object.__proto__ = Object.prototype


var function = new Function()
function.__proto__ = Function.prototype

// 另外,所有函数都是由 Function 构造出来的,所以
Number.__proto__ = Function.prototype // 因为 Number 是函数,是 Function 的实例
Object.__proto__ = Function.prototype // 因为 Object 是函数,是 Function 的实例
Function.__proto__ == Function.prototye // 因为 Function 是函数,是 Function 的实例!

内存图解决一切想当然。

容易混淆

Object.__proto__ === Function.prototype
Object.prototype.__proto__ === null

相关文章

  • 廖雪峰JS小记

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

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

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

  • 浅谈原型与原型链

    全局对象window ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对...

  • 2019-01-28

    原型与原型链

  • 浅谈Js原型与原型链

    关于JS面向对象,我们首先需要了解的一个问题,就是什么是内存! var a = 1 发生了什么? 我们常说的内存...

  • 浅谈 JS 原型 与 原型链

    什么是原型 我们创建的每个函数都有一个 prototype (原型)属性,这个属性是一个指针,指向一个原型对象,而...

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

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

  • JavaScript 面向对象第一篇

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

  • 原型与原型链以及继承

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

  • 浅谈原型和原型链?

    构造函数是为了构建一个自定义类,并且创建这个类的实例 构造函数其实一个普通的函数,不同的是构造函数的首字母要大写,...

网友评论

      本文标题:浅谈原型与原型链

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