分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

JS中如何在外部引用私有变量的两种方法 复习

发布时间:2023-09-06 02:08责任编辑:郭大石关键词:暂无标签

引用:https://blog.csdn.net/liwenfei123/article/details/77964222

运用闭包的特权方法

在构造函数中定义特权方法

  • 这种模式在构造函数中定义了所有私有变量和函数。
  • 能够在构造函数中定义特权方法是因为特权方法作为闭包,能够访问在构造函数中定义的所有变量和函数。
function product(){ ???var name=‘yuxiaoliang‘; ???this.getName=function(){ ???????return name; ???}}var obj=new product();console.log(obj.getName())// "yuxiaoliang"
function Person(name){   this.getName=function(){     return name;   };   this.setName=function(value){     name=value;   }; } var person=new Person(‘Lee‘); alert(person.getName());//‘Lee‘ person.setName(‘lwf‘); alert(person.getName());//‘lwf‘
  • 私有变量name在Person的每个实例中都不相同,因为每次调用构造函数都会重新创建这两个方法。
  • 构造函数模式的缺点就是针对每个实例都会创建同样一组新方法,而使用静态私有变量来实现特权方法就可以避免这个问题。

静态私有变量

(function(){ ???//私有变量和私有函数 ???var privateVariable = 10; ???????function privateFunction(){ ???????return false; ???} ???????//构造函数 ???MyObject = function(){ ???} ???????//公有/特权方法 ???MyObject.prototype.publicMethod = function(){ ???????privateVariable ++; ???????return privateFunction(); ???} ???})();var object = new MyObject();console.log(object.publicMethod());//false
  • 上面模式在定义构造函数时并没有使用函数声明,而是使用了函数表达式。函数声明只能创建局部函数,我们需要在私有作用域外面使用构造函数。声明MyObject时也没有使用var,这样MyObject就成了一个全局变量,能够在私有作用域之外被访问。

  • 由于特权方法是在原型上定义的,因此所有的实例都使用同一个函数,而这个特权方法,作为一个闭包,总是保存着对包含作用域的引用。

(function(){ ???var name = ‘‘; ??????Person = function(value){ ???????name ?= value; ????????} ???Person.prototype.getName = function(){ ???????return name; ???} ???Person.prototype.setName = function(value){ ?????????name = value; ???}})();var person1 = new Person(‘Tom‘);var person2 = new Person(‘Lucy‘);console.log(person1.getName());//Lucyconsole.log(person2.getName());//Lucy
  • 这个例子Person构造函数和getName()和setName()方法都能访问私有变量name,变量name就变成了一个静态的、所有实例共享的属性。也就是在一个实例上调用setName()会影响所有的实例。

JS中如何在外部引用私有变量的两种方法 复习

原文地址:https://www.cnblogs.com/xiaoyuchen/p/10547952.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved