• 私有变量在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. mini2440 Nor Flash工作原理分析

    我的mini2440上是只接了一块Nor Flash,型号是S29AL016M90TAI02,这是一块2M Byte,16位宽度的Nor Flash,用于引导扇区的闪存.原理图里面关键的引脚是: 地址 ...

  2. C# 中的 Async 和 Await

    这篇文章由Filip Ekberg为DNC杂志编写. 自跟随着.NET 4.5 及Visual Studio 2012的C# 5.0起,我们能够使用涉及到async和await关键字的新的异步模式.有 ...

  3. 自定义JS Map 函数

    // 自定义JS Map 函数 function Map() { var map = function (key, value) {//键值对 this.key = key; this.value = ...

  4. WPF绑定xaml中绑定对象需用属性表示,字段不可以绑定

    在练习WPF绑定时发现对象属性可以在XAML中绑定,但字段是不可以绑定: 比如: private Person person{get;set;}  可以绑定到XAML中,<TextBox Nam ...

  5. hdu 3339 In Action (最短路径+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. CF986B Petr and Permutations

    题意翻译 Petr要打乱排列.他首先有一个从 111 到 nnn 的顺序排列,然后进行 3n3n3n 次操作,每次选两个数并交换它们. Alex也要打乱排列.他与Petr唯一的不同是他进行 7n+17 ...

  7. Oracle数据库表被锁定以及去除方式

    select t2.username, t2.sid, t2.serial#, t3.object_name, t2.OSUSER, t2.MACHINE, t2.PROGRAM, t2.LOGON_ ...

  8. [NOIP2016 TG D2T3]愤怒的小鸟

    题目大意:有一架弹弓位于(0,0)处,每次可以用它向第一象限发射一只小鸟,飞行轨迹均为形如y=ax2+bxy=ax+bx2 y=ax2+bx的曲线,且必须满足a<0(即是下开口的) 平面的第一象 ...

  9. BZOJ3994:[SDOI2015]约数个数和——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://www.luogu.org/problemnew/show/P3327#sub ...

  10. HDU.2647 Reward(拓扑排序 TopSort)

    HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...