问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用 JavaScript 实现真正的私有属性

发布网友 发布时间:2022-04-25 16:12

我来回答

2个回答

懂视网 时间:2022-05-15 23:06

很多书上都是说,Javascript是不能真正实现Javascript私有成员的,因此在开发的时候,统一约定 __ 两个下划线开头为私有变量。

后来,发现Javascript中闭包的特性,从而彻底解决了Javascript私有成员的问题。

function testFn(){
 var _Name;//定义Javascript私有成员
 this.setName = function(name){
 _Name = name; //从当前执行环境中获取_Name
 }
 this.getName = function(){
 return _Name;
 }
}// End testFn
var test = testFn();
alert(typeof test._Name === "undefined")//true
test.setName("KenChen");

test._Name 根本访问不到,但是用对象方法能访问到,因为闭包能从当前的执行环境中获取信息。

接下来我们看看,共有成员是怎样实现的

function testFn(name){
 this.Name = name;
 this.getName = function(){
 return this.Name;
 }
}
var test = new testFn("KenChen");
test.getName(); //KenChen
test.Name = "CC";
est.getName();//CC

接下来在看看类静态变量是怎样实现的

function testFn(){
}
testFn.Name = "KenChen";
alert(testFn.Name);//KenChen
testFn.Name = "CC";
alert(testFn.Name);//CC

热心网友 时间:2022-05-15 20:14

基于闭包的实现方式

另外一种比较普遍的方式是利用JavaScript的闭包特性。构造函数内定义局部变量和特权函数,其实例只能通过特权函数访问此变量,如下:

function Person(name){  var _name = name;  this.getName = function(){    return _name;
}
}var person = new Person('Joe');

这种方式的优点是实现了私有属性的隐藏,Person 的实例并不能直接访问_name属性,只能通过特权函数getName获取:

alert(person._name); // undefinedalert(person.getName()); //'Joe'

使用闭包和特权函数实现私有属性的定义和访问是很多开发者采用的方式,Douglas Crockford也曾在博客中提到过这种方式。但是这种方式存在一些缺陷:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...唱的.长头发,一边弹钢琴一边唱很温柔的情歌,反正那个男人的长... 2012年重大事件? c盘变成红色了,怎么清理啊 pet和pp有什么区别 公司辞退工伤员工怎么补偿 怎样提高我在理科的学习能力呢? 信息流广告投放平台都有哪些? worth哪个诗人 东方花映冢 ~ Phantasmagoria of Flower View.系统说明 CAD编辑窗口位置如何调? javascript怎么在定义函数内定义公共变量? js怎么在私有方法里调用公有方法 JavaScript 中有可能模拟出类的私有变量吗 电脑升级Win10系统后之前的照片资料还在吗 js中如何让变量公有化 我想问,电脑的系统更新到win10 文件照片还有什么的还在不? 公共变量与私有变理的定义与区别 ​本人电脑刚刚升级成win10,怎么找到当前桌面的壁纸位置 本地变量,私有变量和公共变量的区别? java的类中成员变量前的私有和公共有什么区别 我国信用的主要形式是? javascript:什么叫做私有静态变量呢? javascript关于私有变量的问题。 信用形式有哪些 国家信用的主要工具是(A,*债券 B,银行贷款 C,银行透支 D,发行银行券 地方政府债券是国家信用的主要形式吗? 4399电脑端迷你世界微信登录怎么可以登录一次以后不用登录? 国家信用的基本形式有哪些? 国际信用有哪些具体形式 4399迷你世界怎么打开shop?电脑版 电脑升级win10之后,桌面上的文件会莫名其妙不见,不管是pdf,word文件或者是图片文件 如何用js实现类似于面向对象语言中类的私有变量 保护变量的安全实现JS私有属性和私有方法 win10这个自动更新的图片在哪存放? 怎样把jquery中的私有方法变为公有的? 体重上升的原因有几种 体重为什么会突然增加 js的私有变量和作用域链的练习题求解答 体重突然上升是什么原因 为什么体重会突然增加 莫名其妙的增加 没有猛吃东西 体重突然上升的原因 最近体重一直上涨怎么回事 为什么体重突然上涨 什么因素会引起体重快速升高? 体重为什么突然上升 什么原因体重突然增加 体重每天都在上升是什么原因 为什么开始规律运动后体重会突然增加的解答 运动后体重为什么突然增加 简述在创新思维培养的过程中常见的思维障碍有哪些