闭包+原型对象

首先我们要了解闭包的含义:

闭包即重用变量,又保护变量不被污染的一种机制,

//闭包
var local = '变量'; //局部变量
function arr(){ //arr为函数
console.log(local) //可访问到local变量
}

简单来说:闭包就是:「函数」和「函数内部能访问到的变量」(也叫环境)的总和。

 

在讲原型链之前先了解什么是原型:

proto 叫做内部原型,prototype 叫做构造器原型

原型:在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性[[prototype]],我们通常称之为原型

   

 

 

原型链:

下面附带一张图

工作原理是:当我们有一个构造函数Student , 实例化一个stu对象,当我们需要用到stu中的方法时,就会去proto属性(“父亲”)内去寻找有没有这个方法,从而对象的proto属性指向其构造函数的prototype属性。若在上一层没有找到stu方法,则会继续向“爷爷”辈的属性去找,也就是去Object中去找。

 

原型链:

  1.保存着所有对象的成员(方法和属性)

  2.控制对象访问成员的使用顺序,优先使用自己的,自己没有才沿着原型链向父级查找

  3.原型链的顶端是Object.prototype

 

 

A.验证原型对象:

  1.如果一个对象的原型对象是Array.prototype     ———— Object.getPrototypeOf(obj)  获得指定obj的原型对象== Array.prototype

    例:Object.getPrototypeOf(obj1) == Array.prototype

 

  2.判断father是否是child的父对象  ————   var bool = father.isPrototypeOf(child); 

    例:Array.prototype.isPrototypeOf(obj1)

B.验证构造函数:

  1.如果一个对象的构造函数是Array  ————    obj1.constructor == Array

    例:obj1.constructor == Array

  2.判断obj是否由构造函数Array创建出来    ————    var bool = obj instanceof Array 

    例:obj1 instanceof Array

C.检查内部属性class

  class是每个对象中记录对象创建时适用的类型的属性,就好比人的DNA,一旦对象被创建,class属性就无法被修改

  获取class:

  Object.protoype中的toString()

    例:console.log(obj1.toString())

    但是几乎所有内置对象的原型对象都重写Object中String方法,所以内置对象的子对象,都无法直接调用Object的toString

    最严格的

    通过  call解决  ——    任意对象.任意方法.call(替换的对象)

    例:console.log(Object.prototype.toString.call(obj2));

    最严格的的鉴别方法:

    例:Object.prototype.toString.call(obj1) == "[object Array]"

      这种鉴别方法是最靠谱的,建议采取这种鉴别方法。

    

转载于:https://www.cnblogs.com/hzqzwl/p/11331507.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值