`
DBear
  • 浏览: 228588 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类

JS类中能模拟出依赖对象本身的可变的私有属性吗?

阅读更多

JS是轻量级语言,在类的概念上没有如Java那样严格意义上私有函数,公有函数,私有属性,公有属性。但是我们考虑到复用,仍然会希望能够模拟出这些特性。有关私有函数、公有函数的方法,其实蛮简单,就是把私有函数以变量的形式,扔到prototype的闭包中;公有函数则以返回的形式暴露在外面。

 

 

function People() {

};

People.prototype = (function(){
	var _private = function(){};

	var public = function(name){
              _private.call(this);
	};

	return {
               public : public 
	};
})();

 

 

大神说,这个严格来说不是私有函数,因为不搞私有属性没有依赖,但是这种把一个函数自己依赖的其它函数放在闭包里是个很好的习惯。

 

写出来了“私有函数”和公有函数,那么私有属性可否创建呢,比如如下需求的

 

 

var person = new People('xxx');

person.name; // undefined

person.getName(); // 'xxx';

 

我刚开始试图这样写

 

function People(name) {
       this.setName(name);
};

People.prototype = (function(){
        var _name;
        var getName = function(){
	      return _name;
        };

	var setName = function(name){
             _name = name;
	};

	return {
            getName : getName,
            setName : setName
	};
})();

 

我创建一个实例

 

var me = new People('xxx');

console.log(me.name);
console.log(me.getName());

 

结果却是符合了要求。但是,我再创建一个实例

 

var me = new People({name:'L'});
var you = new People({name:'J'});
console.log(me.name);
console.log(me.getName());
console.log(you.name);
console.log(you.getName());

 

然后你会发现,打印出来的都是 'undefined' 'J'。也就是说,原型的_name被最后一个创建的实例改掉了,原因嘛,就是因为_name在原型里,是所有实例共用的。。。

 

因此在JS的类中模拟私有属性是不成立的。忍受下洁癖,还是开放出来吧。

 


分享到:
评论

相关推荐

    可变电阻器外形和电路符号简介

    可变电阻器的外形与普通电阻器在外形上有很大的区别,它具有下列一些特征,根据这些特征可以在线路板中识别可变电阻器:(1)可变电阻器的体积比一般电阻器的体积大些,同时电路中可变电阻器较少,在线路板中能方便...

    Java面向对象程序设计.doc

    《Java面向对象程序设计》模拟试题(A卷)赞赞 " " " " "《Java面向对象程序设计》模拟试题(A卷) " "专业年级:学号: 姓名: 日期: " "一、判断题(15') " "1.Java程序里,创建新的类对象用关键字new,回收无用的...

       char型变量中能不能存储一个中文汉字?为什么

     char型变量中能不能存储一个中文汉字?为什么 char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode...

    基于MATLAB的固定床煤气化过程动力学模型的模拟研究

    以原煤、半焦和焦炭为原料,二氧化碳、水蒸气为气化剂在固定床气化炉内进行气化,根据3种原料的动力学参数建立数学模型,用MATLAB软件编写模拟程序求解常微分方程组,采用打靶法对固定床气化炉从底部开始的每一个微元体...

    Java问题宝典2012版

    抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 16 21、写clone()方法时,通常都有一行代码,是什么? 16 22、面向对象的特征有哪些方面 17 23、java中实现多态的机制是什么? 18 24...

    超级有影响力霸气的Java面试题大全文档

     final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的...

    论文研究-对象定位处理中分类信息融合技术研究.pdf

    通过MIMLSVM 多类别分类算法预判出包含对象的图像, 利用ESS方法在上述图像中定位对象; 针对高精度对象定位需求, 提出了融入全局分类信息的最优框打分机制, 将MIMLSVM 算法对于图像的分类信息融入ESS方法中最优框的...

    js压缩方法

    你想优化你的js文件吗?你想把项目中的js文件变得更小吗?采用此种js压缩方法可以实现你的愿望!

    java类与对象实验报告.docx

    1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果。 2、用类来描述游戏...

    微软JavaScript手册

    如果只需要查看某个主题(例如对象),则有对该主题进行详细说明的章节可供查阅。 如何操作呢?单击左边任意一个标题,即可显示该标题所包含的项目列表。再从该列表中选择要查看的主题。在打开所选主题后,就可以...

    javascript弹出窗口中增加确定取消按钮

    本文给大家分享的是在ECShop的项目中使用到的一个小功能,使用JavaScript实现弹出窗口中增加确定取消按钮,有需要的小伙伴可以参考下

    javascript文档

    javascript的官方文档 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题...

    中能区椭圆流和转变能的系统质量依赖外文翻译.doc

    中能区椭圆流和转变能的系统质量依赖外文翻译.doc

    管理系统能否在vc中能运行

    你想知道一个管理系统能否真正在TC环境中运行这个就能帮助你

    千方百计笔试题大全

    21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 10 22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,...

    java面试宝典

    21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 10 22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,...

    java笔试题

    18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 19、String和StringBuilder、StringBuffer的区别? 20、重载(Overload)和...

    Java面试宝典2011版

    抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24...

    Java面试宝典2017.zip

    抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24...

    网站模拟访问机,模拟网站访问增加网站pv流量

    【网站模拟访问机】 本程序是一款通过模拟IE访问来增加网站的pv流量,并通过模拟百度和谷歌的关键字搜索来增加网站的搜索排名及网站收录。 特点: 1、采用代理IP的真实访问模拟,适应各种统计软件; 2、模拟访问...

Global site tag (gtag.js) - Google Analytics