博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于私有变量,静态私有变量
阅读量:5278 次
发布时间:2019-06-14

本文共 1277 字,大约阅读时间需要 4 分钟。

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

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

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

你可能感兴趣的文章
ArcGIS自定义工具箱-字段值部分替换
查看>>
eclipse的安装和汉化
查看>>
【NumberValidators】大陆身份证验证
查看>>
C语言实现字符串IP与整数型IP的相互转换
查看>>
使用Mongoose类库实现简单的增删改查
查看>>
让WebForm异步起来
查看>>
架构师
查看>>
UIDatePicker自定义背景
查看>>
JS 日期比较
查看>>
ORM的单表操作
查看>>
Radar Installation
查看>>
Read and write SD cards in a raw way with dd
查看>>
Android Activity生命周期举例说明(图文)
查看>>
deinstall oracle 11g on linux
查看>>
4. Median of Two Sorted Arrays *HARD* -- 查找两个排序数组的中位数(寻找两个排序数组中第k大的数)...
查看>>
Windows安装MySQL5.7.17
查看>>
JS面向对象与原型
查看>>
编程之美-2.18-数组分割
查看>>
BZOJ4860 Beijing2017树的难题(点分治+单调队列)
查看>>
BZOJ5372 PKUSC2018神仙的游戏(NTT)
查看>>