zoukankan      html  css  js  c++  java
  • 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、闭包的作用:
                   ① 访问函数的私有变量;
                   ② 让函数的变量始终存在于内存中,而不被释放。

  • 相关阅读:
    数据库备份 DBS(Database Backup),知识点
    关系型数据库 RDS(Relational Database Service),知识点
    对象存储服务 OSS(Object Storage Service),知识点(待补充上仓库代码)
    Java 为什么需要包装类,如何使用包装类?
    for each 语句
    缓存中,2个注解:@cacheable 与 @cacheput 的区别
    微信小程序,相关代码
    微信小程序中的事件
    通俗易懂:索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系
    MySQL 的各种 join
  • 原文地址:https://www.cnblogs.com/zw874827903/p/6853707.html
Copyright © 2011-2022 走看看