• 理解js中私有变量


    • 私有变量在js中是个什么概念。当下我的认识是var所定义的变量,实际可以理解为属性和方法,或者单单是临时存储器,不归属任何对象。

    一个声明函数:

    function a(){
      var v = "bc";
    }

    这样定义的变量v有以下特征:

    • 只有当a函数被执行的时候,即添加尾括号调用,内部才会开始v的声明(预处理)及赋值的操作(执行)。
    • 用后即毁,再不占用内存。
    • 闭包的情况会常驻内存,直到闭包结束。
    • console.dir打印函数v变量不可见。
    • a函数的prototype是个Object对象,而Function是Function对象,Array是Array对象。因此只有Function一个原函数的prototype才是Function对象。普通函数可以作为构造器使用源于对函数的继承。

    测试:

    将函数a的prototype及__proto__都赋值为null。则成了一个既无公有属性的父类,又成了一个无原型继承的子类。进行new操作以后,内部结构:

    这就意味着new 实例化操作构建了一个新对象,来自原始对象Object。构造函数提供的仅仅是初始化的功能。真正构建实例对象是由new Object完成的。

    • 构造函数初始化,可以遗传给后代的属性方法或变量是prototype这个自有原型库,它跟自己的__proto__隐藏原型链无关(函数的__proto__代表的是自己这个函数的方法、属性来源,其后代不具有它遗传来的方法、属性),当实例化一个对象后,该prototype就是新实例的__proto__。
    • 添加入函数的静态属性方法,也即使用func.xxx实际是对自身功能的扩充,即对函数功能的扩充,不会进入prototype库进行继承,实例跟添加的属性或方法互不影响。

            

    • 添加的私有方法无论函数自身还是实例化对象都无法直接访问。函数调用可采用返回值间接访问,而实例化对象该值不在继承之列,但在实例化的同时给构造函数传参,私有变量可以被传递给对外开放的公有变量访问,实际还是函数调用访问而非实例访问,在成为实例对象以后私有变量是不存在的,调用结束函数销毁,静态方法同样,随着函数的销毁而销毁。但公有方法因为this的指向变了,绑定到了实例对象上去继续存在。

           

    • Javascript function中的this指针很关键,如果没有的话,那就是局部变量或局部函数。
  • 相关阅读:
    常用记录
    golang学习笔记之UDP:server端与client端
    golang学习笔记之tcp简单实现:server端与client端
    golang学习笔记之channel
    golang学习笔记之单元测试和压力测试
    Ubuntu 18.04桌面版安装
    Nas服务器使用xampp修改端口号
    Laravel使用Supervisor管理linux自动队列
    php 设计模式学习笔记之单例模式
    终极二分查找--传说十个人写九个有bug
  • 原文地址:https://www.cnblogs.com/jiangtian/p/6343631.html
Copyright © 2020-2023  润新知