zoukankan      html  css  js  c++  java
  • 对原型链、闭包的理解

    1.原型链:

     理解: js在创建对象(不论是普通对象还是函数对象)的时候,都有一个__proto__的内置属性,指向创建它的函数对象的原型。

     示例:

        val  cat  =  new  Animal();

        实例对象cat有一个__proto__属性指向Animal的原型对象,

        即:cat.__proto__   ===  Animal.prototype;

                   同样,Animal.prototype也有一个__proto__属性指向创建它的函数对象(Object)的原型。

           即: Animal.prototype.__proto__   ===   Object.prototype

        继续,Object.prototype也有一个__proto__属性,但它比较特殊,为null

        即: Object.prototype.__proto__    ===   null

     结论: 

      我们把这个由__proto__串起来的直到Object.prototype.__proto__为null的链叫做原型链。
     
      另:每一个函数对象的原型对象还有一个constructor属性指向该函数对象本身。
     
    2.闭包
      理解:
        a.闭包是一种程序结构,即内部函数能够引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中。
        b.闭包是js为对象创建私有变量的一种方式。
      使用闭包时需要注意的点:
        返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果非要引用循环变量,方法是创建一个函数,用该函数的参数绑定循环变量。
        
    function count() {
        var arr = [];
        for (var i=1; i<=3; i++) {
            arr.push((function (n) {
                return function () {
                    return n * n;
                }
            })(i));
        }
        return arr;
    }
    
    var results = count();
    var f1 = results[0];
    var f2 = results[1];
    var f3 = results[2];
    
    f1(); // 1
    f2(); // 4
    f3(); // 9

      上例如果不使用自执行函数,则f1(),f2(),f3()返回的结果都是16;

        
     
  • 相关阅读:
    Flume下读取kafka数据后再打把数据输出到kafka,利用拦截器解决topic覆盖问题
    idea 党用快捷键
    Idea 调试快捷键
    log4j实时将数据写入到kafka,Demo和相关的配置详解
    windows环境下,kafka常用命令
    ElasticSearch 基本概念
    elasticsearch REST API方式批量插入数据
    自提柜-资产管理柜
    10.智能快递柜(源码下载)
    9.智能快递柜SDK(串口型锁板)
  • 原文地址:https://www.cnblogs.com/zifayin/p/8444962.html
Copyright © 2011-2022 走看看