• 私有变量在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指针很关键,如果没有的话,那就是局部变量或局部函数。

理解js中私有变量的更多相关文章

  1. 深入理解JS中的变量及变量作用域

    JS的变量有两种,“全局变量”和“局部变量”. “全局变量”声明在函数外部,可供所有函数使用,(全局变量属于window)而“局部变量”声明在函数体内部,只能在定义该变量的函数体内使用. 1.全局变量 ...

  2. 深入理解JS中的对象(三):class 的工作原理

    目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...

  3. js对象私有变量公有变量问题

    0 js对象私有变量公有变量问题5 小弟初学JS面向对象编程 现有一问题 请教各位大虾: Person=function (){ //私有变量定义 var name; vae age; var Ale ...

  4. Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)

    一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...

  5. JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构

    JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...

  6. JS中的变量和输入输出

    一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button& ...

  7. js 中的变量声明提前总结

    一.var 声明 ES6之前,js 中声明变量基本上用 var 关键字: 1.如果访问未声明的变量,会报错:ReferenceError 2.声明了未赋值,值为 undefined,跟前面的报错是两回 ...

  8. 如何更好的理解js中的this,分享2段有意思的代码

    关于js中this的浅析,大家可以点击[彻底理解js中this的指向,不必硬背]这篇博客了解. 今天遇到2段比较有意思的代码. ----------------第一段----------------- ...

  9. js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)

    js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...

随机推荐

  1. Python的压缩文件处理 zipfile & tarfile

    本文从以下两个方面, 阐述Python的压缩文件处理方式: 一. zipfile 二. tarfile 一. zipfile 虽然叫zipfile,但是除了zip之外,rar,war,jar这些压缩( ...

  2. Java经典设计模式 总览

    一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...

  3. ASP.Net MVC+Ibaties架构

    1.配置Ibaties首先在DLL引用中添加Ibaties相关引用:IBatisNet.Common.dll;IBatisNet.Common.Logging.Log4Net.dll;IBatisNe ...

  4. 【SQLAlchemy】SQLAlchemy修改查询字段列名

    SQLAlchemy问题记录 company price quantity Microsoft Google Google Google 要实现脚本 select price, sum(quantit ...

  5. 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询

    题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...

  6. Oracle 物化视图创建以及常见问题

    create materialized view MV_XXXXrefresh fast on commitwith rowidenable query rewriteasselect * from ...

  7. 【题解】CF#285 E-Positions in Permutations

    挺有收获的一道题ヾ(◍°∇°◍)ノ゙ 恰好为 m ,这个限制仿佛不是很好处理.一般而言,我所了解的恰好为 k 的条件,不是用组合数 / dp状态转移 / 斜率二分就只剩下容斥了.我们可以先处理出 nu ...

  8. 【题解】SHOI2014概率充电器

    首先发现答案就是每个节点有电的概率之和.有电的概率牵扯太广不好求,所以转化为求没有电的概率.这题最难的部分在于:一个节点如果有电,可以来自儿子,也可以来自父亲.我们考虑将这两个部分分离开来:建立状态 ...

  9. [luoguT30208]太极剑

    题面在这里 description 在一个圆环上给出\(n\)条端点在圆环上的绳子, 每次在圆环上切割的轨迹是一条直线,可以将可以将所有与这条直线相交的绳子切断. 求切割次数的最小值. data ra ...

  10. BZOJ2565:最长双回文串——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2565 题目大意: 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(ab ...