• 闭包+原型对象


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

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

    //闭包
    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]"

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

        

  • 相关阅读:
    java-反射
    java-异常
    Jmeter-逻辑控制器
    Jmeter-断言
    java-函数传参
    怎么测试一个杯子
    java+selenium3-元素定位
    java+selenium3-简介及环境搭建
    微软企业库5.0 使用举例
    数据库连接字符串ConnectionString 中的关键字值释义
  • 原文地址:https://www.cnblogs.com/hzqzwl/p/11331507.html
Copyright © 2020-2023  润新知