有权访问私有变量和私有函数的公有方法称之为特权方法,对象上创建特权方法的方式有两种。

第一种:直接在构造函数中定义特权方法,基本模式如下

function MyObject(){var privateVariable = 10;function privateFunction(){alert(1);    }this.publicMethod = function(){privateVariable++;return privateFunction();    }//特权方法
}
var aa = new MyObject();
aa.publicMethod();

this.publicMethod 方法作为MyObject函数的闭包因而有权访问在构造函数中定义的变量和方法,aa实例中,除了用publicMethod()这个特权方法来访问外,没有任何其他办法直接访问privateVariable和privateFunction()。在这个实例中
publicMethod()即为 构造函数MyObject的特权方法之一。

构造函数中定义特权方法有一个缺点,就是必须使用构造函数模式来达到这个目的,而构造函数模式的缺点是每个实例都会创建同样的一组新方法。

静态私有变量

通过在私有作用域中定义私有变量或函数同样可以创建特权方法,基本模式如下
(function(){var praviteVariable = 10;function praviteFunction(){return false;    }MyObject = function(){}MyObject.prototype.publicMethod = function(){privateVariable++;return privateFunction();    }
})();

这个模式中创建了一个私有作用域,里面封装了一个构造函数。公有方法使用了原型定义,这个模式在定义构造函数式没有使用函数声明,也没有在声明MyObject时使用var,那么由于未经初始化的变量总是会创建一个全局变量的缘故,MyObject就此成为了一个全局变量,能够在私有作用域之外被访问到。

这种模式与构造函数中定义特权方法的主要区别在于,这种方法下私有变量和函数是由实例共享的,由于这个特权方法实在原型上定义的,因此所有的实例都使用同一个函数,但是因为这个特权方法是作为一个闭包,因此这个闭包总是包含着作用域的引用,导致的后果就是每个创建的实例所使用引用的变量都是一样的,即不管哪个实例改变了变量的值,其他实例中这个变量的值也会被改变,因为这个特权方法总是保存着对包含作用域的作用。

转载于:https://www.cnblogs.com/SLEBEE/p/3961892.html

关于私有变量,静态私有变量相关推荐

  1. 静态局部变量和静态全程变量static。

    1. 什么是static? static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性. 1.1 static 的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时, ...

  2. java中子类对父类中的私有变量和私有方法有拥有权无使用权

    解释的我觉得也到位:子类拥对父类的私有变量具有拥有权 但是不具有使用权. 再和以前学的东西联系起来,总结如下: 1.不管父类中的成员变量是静态的还是非静态的,子类统统拥有(这里不用继承概念). 2.不 ...

  3. Java的子类可以继承父类的私有变量和私有方法吗?

    答:实际上继承了. 父类的成员变量(包含私有变量)和成员方法地址(包含私有成员方法)都存放在子类对象中.父类的私有变量和私有方法虽然在子类对象中,但是对于子类对象而言是不可见的,无法直接访问和调用,必 ...

  4. Object-C 有私有变量?私有方法?

    从object-c 动态编译机制上讲是不存在私有变量和私有方法的.但是如果你不在.h中声明变量和方法在其它地方无法访问这些变量和方法,那么就成了私有的了.私有变量也可以使用@prviter进行修饰. ...

  5. python 私有和保护成员变量如何实现?—— 单下划线 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量; 双下划线 开始的是私有成员,意思是只有类对象自己能访问...

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...

  6. python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...

    本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...

  7. 19. Python 类的重写   类的私有变量和私有方法

    1.类的重写 例子: class parent(object):name = 'parent'age = 100def __init__(self):print('my name is parent' ...

  8. java中私有变量和方法_Java 私有变量和私有方法

    作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com) 内容索引 访问私有变量 访问私有方法 在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java ...

  9. python_day6_面向对象的介绍/构造函数/类变量和实例变量/析构函数/私有属性和私有方法/继承、多继承和继承实例/多态

    python_面向对象的介绍/构造函数/类变量和实例变量/析构函数/私有属性和私有方法/继承.多继承和继承实例/多态 在这里得感谢,老师Alex金角大王(路飞学城IT) Python(给兄弟们挂个

最新文章

  1. 基于单片机的倒车雷达系统设计c语言,基于AT89C2051单片机实现超声波倒车雷达系统的设计...
  2. 【Spring实战】注入非Spring Bean对象
  3. 程序间数据共享与传递(2):EXPORT/IMPORT、SAP/ABAP Memory
  4. 复杂的数据类型3 - C++快速入门09
  5. 【IT资讯】TIOBE 7月编程语言排行榜显示,这些编程语言更吃香
  6. 【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
  7. 7-1-JavaBean基础
  8. python是脚本语言_Python 脚本语言
  9. 10.27T1 堆贪心
  10. 解读加多宝的营销案例分析
  11. html中div hover的用法,CSS: hover选择器的使用详解
  12. 飓风“桑迪”的蝴蝶效应:扇起桑迪域名注册潮
  13. ERROR | Corrupt JPEG data: 111 extraneous bytes before marker 0xd9...
  14. 卓聚社区,新发现的全能社区
  15. 【云服务器】免费云服务器推荐
  16. RabbitMq设置可视化界面
  17. peel在Linux生成excel,zplane -
  18. PHP开发的站长导航网源码修复版
  19. 基于MuPDF库实现PDF文件转换成PNG格式图片
  20. 实验3 电磁波平面波对理想介质分界面垂直入射实验

热门文章

  1. python3.7安装pyspider安装教程_Windows环境下Python3安装Pyspider
  2. linux虚拟内存当硬盘,linux里面虚拟内存和swap有什么不同?
  3. linux连接到程序,Linux下C程序的链接过程
  4. ms17-010 php版本,那年MS17-010
  5. 算法心经:数学的应用:概率的应用
  6. [CODEVS 1244] 云中通信
  7. AtCoder AGC029E Wandering TKHS
  8. 三级C语言上机考试试题与题解,全国计算机等级三级C语言上机试题逐题解析
  9. system函数阻塞_CompletableFuture:让你的代码免受阻塞之苦
  10. c# socket接收字符串_socket通信很难?这一文让你轻松搞定!