• 私有变量在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. 编译android6.0错误recipe for target 'out/host/linux-x86/obj/lib/libart.so' failed

    转自:http://blog.csdn.net/ztguang/article/details/52856076 trip: libpagemap_32 (out/target/product/xx/ ...

  2. php 生成短网址 代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  3. idea超炫的自定义模板

    idea超炫的自定义模板   idea 有些快捷键 sout -> System.out.println() ,输入sout,idea能自动补全代码, 这种约定的快捷方式大大提高了效率, 而id ...

  4. Spring编程式事务管理及声明式事务管理

    本文将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. Spring 事务属性分析 事务管理 ...

  5. 在html在添加cookie和读取cookie

    1.保存cookie var oDate = new Date(); oDate.setDate(oDate.getDate() + );//有效期为30天 document.cookie = &qu ...

  6. EL中定义函数

    1.在java类中要定义一个static函数 2配置:在WEB-INF/*.tld的配置文件 3在JSP页面上 4使用

  7. bzoj4753[JSOI2016]最佳团体

    题意:01分数规划,但可选的数字之间存在森林形的依赖关系(可以认为0号点是个虚根,因为并不能选). 虽然有森林形的依赖关系,但还是可以套分数规划的思路,二分答案k,判断是否存在一个比值大于k的方案 即 ...

  8. BZOJ4260 Codechef REBXOR(trie)

    用trie求出前缀最大区间异或和.后缀最大区间异或和即可.注意空间是nlog的. #include<iostream> #include<cstdio> #include< ...

  9. 新版chrome touch警告处理办法

    最近做项目经常在 chrome 的控制台看到如下提示: Unable to preventDefault inside passive event listener due to target bei ...

  10. (转)python 搭建libsvm方法。python版本和libsvm版本匹配很重要!

    <集体智慧编程>关于婚介数据集的SVM分类 转自:http://muilpin.blog.163.com/blog/static/165382936201131875249123/   作 ...