理解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指针很关键,如果没有的话,那就是局部变量或局部函数。
理解js中私有变量的更多相关文章
- 深入理解JS中的变量及变量作用域
JS的变量有两种,“全局变量”和“局部变量”. “全局变量”声明在函数外部,可供所有函数使用,(全局变量属于window)而“局部变量”声明在函数体内部,只能在定义该变量的函数体内使用. 1.全局变量 ...
- 深入理解JS中的对象(三):class 的工作原理
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...
- js对象私有变量公有变量问题
0 js对象私有变量公有变量问题5 小弟初学JS面向对象编程 现有一问题 请教各位大虾: Person=function (){ //私有变量定义 var name; vae age; var Ale ...
- Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)
一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- JS中的变量和输入输出
一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button& ...
- js 中的变量声明提前总结
一.var 声明 ES6之前,js 中声明变量基本上用 var 关键字: 1.如果访问未声明的变量,会报错:ReferenceError 2.声明了未赋值,值为 undefined,跟前面的报错是两回 ...
- 如何更好的理解js中的this,分享2段有意思的代码
关于js中this的浅析,大家可以点击[彻底理解js中this的指向,不必硬背]这篇博客了解. 今天遇到2段比较有意思的代码. ----------------第一段----------------- ...
- js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)
js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...
随机推荐
- BAT批处理(三)
1.set set命令:显示.设置或删除变量.显示变量:set 或 set s 前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值.设置变量:set aa=abcd 此句命令便可 ...
- 【Linux】- CentOS搭建FTP服务器
1.安装vsftpd yum install -y vsftpd 2.启动vsftpd服务 service vsftpd start 3.查看运行状态 netstat -nltp | 完毕!!! 参考 ...
- Oracle AWR日志使用
SQL>@?/rdbms/admin/awrrpt.sql Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Would you like an H ...
- [OS] CPU调度
调度准则 为了比较CPU调度算法,分析员提供了许多准则,用于比较的特征对确定最佳算法有很大影响.这些准则包括: ·CPU使用率:需要使CPU尽可能忙. ·吞吐量:一个时间单元内完成进程的数量. ·周转 ...
- BZOJ 2303 方格染色(带权并查集)
要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...
- BZOJ 1818 内部白点(离散化+树状数组)
此题就是1227 的弱化版. 画个图或者稍微证明一下就能够知道,一定不会超过一次变换. 那么我们只需要统计有多少个白点会变黑,换句话说就是有多少个白点上下左右都有黑点. 离散化横坐标,因为没有黑点在的 ...
- Python字符串的简单操作
数据的操作 字符串的一些常用操作: 1 1 #!/usr/bin/env python 2 # #coding=utf-8 3 # 4 # test='hello world' 5 # print(t ...
- Atom Editor 插件 atom-less 的使用方法
一.下载安装 atom-less atom-less 项目在这里:https://github.com/schmuli/atom-less 安装方法请参考这篇博文:http://blog.csdn.n ...
- Python面向对象—类属性和实例属性
属性:就是属于一个对象的数据或函数元素 类有类方法.实例方法.静态方法.类数据属性(类变量)和实例数据属性(实例变量). 类属性:包括类方法和类变量,可以通过类或实例来访问,只能通过类来修改. 实例属 ...
- 【题解】51nod1967 路径定向
第一次写欧拉回路,实际上只要dfs下去就可以了,反正每条边都是要遍历一遍的…… 关键有两个性质:1.一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图.2.一个有向图存在欧拉回路 ...