Js解惑——原型链

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


一切都是对象

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

函数与对象的关系

  1. 对象都是通过函数来创建的
  2. 每个函数都有一个属性,叫做prototype,属性值是一个对象,该对象默认只有一个属性,constructor指向函数本身     ```         function.prototype         // key = prototype, value = Object

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

原型链

原型

  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__这条链想上找,这就是原型链

执行上下文

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

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

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

this

分四种情况

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

作用域

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

闭包

  1. 函数作为返回值
  2. 函数作为参数被传递
  3. 以上两种情况,如果函数引用其他作用域中的自由变量,则形成闭包

转载于:https://my.oschina.net/u/3035165/blog/1329871

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值