• Java script OOP——浅谈


    一、this的详解

         1、谁最终调用函数,this就指向谁。(具体如下:)

             ① this指向的,永远只可能是对象!
             ② this指向谁,永远不取决于this写在哪!!而是取决于函数在哪调用。
             ③ this指向的对象,我们称之为函数的上下文context,也叫函数的调用者。

         2、this的指向规律(共有六条这是重点)

              ① 通过函数名()直接调用:this指向window

                    function func(){

                          console.log(this);
                    }
                    func(); 

          
              ② 通过对象.函数名()调用的:this指向这个对象     

                    var obj = {
                         name:"obj",
                         func1 :func
                    };
                    obj.func1(); 


              ③ 函数作为数组的一个元素,通过数组下标调用的:this指向这个数组    

                     var arr = [func,1,2,3];
                     arr[0](); // this--->arr


              ④ 函数作为window内置函数的回调函数调用:this指向window setInterval setTimeout 等...   

                     setTimeout(func,1000);// this--->window
                     //setInterval(func,1000);

     
             ⑤ 函数作为构造函数,用new关键字调用时:this指向新new出的对象

                        var obj = new func(); //this--->new出的新obj


             ⑥通过call、apply和bind调用,this指向我们规定的对象。(人为控制的)
                    func.call(obj,参数1 参数2 参数3....)
                    func.apply(obj,参数1 参数2 参数3....)
                    func.bind(obj,参数1 参数2 参数3....) var f = function.bind(obj)

    二、原型链        

               1、通过构造函数new出的对象,新对象的_proto_指向构造函数
               2、所有函数的_proto_指向function()内置函数的prototype
               3、非构造函数new出的对象包括( {} newObject() 对象的prototype )的_proto_指向Object的prototype
               4、Object的_proto_指向null

                                如下是一张自绘的原型链图

                          

    三、闭包

        JS中的作用域

             1、全局变量:函数外声明的变量

                 局部变量:函数内声明的变量

                  在JS中,函数为唯一的局部作用域,而if、for等其他{}没有自己的作用域
                 所以,函数外不能访问局部变量。其实,变量在函数执行完毕以后,占用的内存就被释放。

            2、如何访问函数私有变量?
                JS中,提供了一种"闭包"的概念:在函数内部,定义一个子函数,可以用子函数访问父函数的私有变量。执行完操作以后,将子函数通过return返回。
                  function func2(){
                        var num = 1;
                        function func3(){
                               var sum = num+10;
                                alert(sum);
                       }
                      return func3;
                   }

                   var f = func2();
                   f();

            3、闭包的作用:
                   ① 访问函数的私有变量;
                   ② 让函数的变量始终存在于内存中,而不被释放。

  • 相关阅读:
    Java8初体验(二)Stream语法详解
    java8的新特性以及用法简介
    HDFS之SequenceFile和MapFile
    深入分析Parquet列式存储格式【转】
    Flume中的HDFS Sink配置参数说明【转】
    采用alluxio提升MR job和Spark job性能的注意点
    spark on alluxio和MR on alluxio测试(改进版)【转】
    python入门-分类和回归各种初级算法
    C++函数调用时的参数传递-3中传递方式
    OpenCV颜色空间——HLS颜色空间
  • 原文地址:https://www.cnblogs.com/zw874827903/p/6853707.html
Copyright © 2020-2023  润新知