Js解惑——原型链

王福朋:深刻理解javascript原型和闭包javascript


一切都是对象html

对象就是属性的集合,也就是一堆键值对,就连函数也是对象。java

函数与对象的关系浏览器

  1. 对象都是经过函数来建立的
  2. 每一个函数都有一个属性,叫作prototype,属性值是一个对象,该对象默认只有一个属性,constructor指向函数自己     ```         function.prototype         // key = prototype, value = Object

        function.prototype.contructor --> function     ``` 3. 每一个对象都有一个隐藏的属性,"__proto__",这个属性指向建立这个对象的函数(对象)的prototype属性闭包

原型链

原型app

  1. 自定义函数的prototype指向一个对象,该对象的__proto__指向Object.prototype
  2. 自定义函数做为对象,它的__proto__指向Function.prototype
  3. Object.prototype指向null
  4. Function.__proto__指向Function.prototype

继承函数

  1. A instanceof B,instanceof表示一种关系,或者原型链的结构
  2. A对象的__proto__和B函数的prototype,若是能找到同一个引用,则为true
  3. 访问一个对象的属性时。如今基本属性中查找,若是没有,再沿着__proto__这条链想上找,这就是原型链

执行上下文this

在一段js代码执行以前,浏览器先作一些准备工做prototype

  1. 变量、函数表达式(var a = fn(){}),变量声明,默认赋值为undefined
  2. this,赋值
  3. 函数声明,赋值

js代码的执行上下文,相似于java中加载类时的初始化过程。htm

this

分四种状况

  1. 构造函数中的this,new的时候表明它即将new出来的对象,直接调用时则不同
  2. 函数做为对象的一个属性被调用时,this指向该对象
  3. 函数用call或者apply调用,this指向传入的对象
  4. 全局、调用普通函数,this指向window

做用域

  1. js没有块级做用域
  2. 除了全局做用域以外,只有函数能够建立做用域
  3. 对于没有在本做用域声明的自由变量,取值要到建立这个函数的那个做用域中取值

闭包

  1. 函数做为返回值
  2. 函数做为参数被传递
  3. 以上两种状况,若是函数引用其余做用域中的自由变量,则造成闭包
相关文章
相关标签/搜索