- 浏览: 707519 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
模拟私有属性
现在介绍闭包如何帮助模拟私有成员。正常情况下,无法从函数以外访问函数内的本地变量。函数退出之后,由于各种实际的原因,该本地变量将永远消失。但是,如果该本地变量被内部函数的闭包捕获,它将生存下来。这一事实是模拟JavaScript私有属性的关键。假设有一个Persion类:
function Persion(name, age) { this.getName = function(){return name;}; this.setName = function(newName){name = newName;}; this.getAge = function(){return age;}; this.setAge = function(newAge){age = newAge;}; }
参数name和age是构造函数Persion的本地变量。Persion返回时,name和age应当永久消失。但是,它们被作为Persion实例的方法而分配的四个内部函数捕获,实际上这会使name和age继续存在,但只能严格地通过这四个方法访问它们。因此,您可以:
var ray = new Persion('Ray', 31); alert(ray.getName()); alert(ray.getAge()); ray.setName("Younger Ray"); //Instant rejuvenation ray.setAge(22); alert(ray.getName() + " is now " + ray.getAge() + "years old.");
未在构造函数中初始化的私有成员可以成为构造函数的本地变量,如下所示:
function Persion(name, age) { var occupation; this.getOccupation = function() //accessors for name and age { return occupation; } this.setOccupation = function(newOcc) { occupation = newOcc; } }
注意,这些私有成员与我们期望从C#中产生的私有成员略有不同,在C#中,类的公用方法可以访问它的私有成员。但是在JavaScript中,只能通过在其闭包内拥有这些私有成员的方法来访问成员(由于这些方法不同于普通的公用方法,它们通常被称为特权方法),因此,在Persion的公用方法中,仍然必须通过私有成员的特权访问器方法才能访问私有成员:
Persion.prototype.somePublicMethod = function() { // doesn't work! // alert(this.name); // this one below works alert(this.getName); }
Douglas Crockford 是著名的发现(或者也许是发布)使用闭包来模拟私有成员这一技术的第一人。他的网站 javascript.crockford.com 包含有关 JavaScript 的丰富信息,任何对 JavaScript 感兴趣的开发人员都应当仔细研读。
下一节:从类继承
发表评论
-
JavaScript 代码压缩工具
2011-02-16 15:15 944见附件,免费工具。 -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2009-11-26 13:38 10713在服务器端判断request来自Ajax请求(异步)还是传 ... -
转:用Javascript来关闭IE浏览器和FireFox浏览器
2009-06-03 11:08 2180原文地址:http://hi.baidu.com/suen ... -
JavaScript 解析 JSON
2009-02-25 20:36 0JSON (JavaScript Object Not ... -
JavaScript的四舍五入运算
2009-02-02 13:49 1785function ForDight(Dight,How) { ... -
JavaScript 使用面向对象的技术创建高级 Web 应用程序
2009-01-19 21:44 1514转载: JavaScript 使用面 ... -
在JavaScript中使用面向对象
2009-01-18 17:05 1128原文地址:http://www.cnblo ... -
应当这样编写 JavaScript 代码吗?
2009-01-17 23:09 1125应当这样编写 JavaScript 代码吗? 您已经看到Ja ... -
JavaScript模拟命名空间
2009-01-17 17:35 1332JavaScript模拟命名空间 在C++和C#中,命名 ... -
JavaScript 从类继承
2009-01-17 17:32 1277从类继承 到这里,我们已经了解了构造函数和原型对象如何使您在 ... -
闭 包
2009-01-07 15:10 1240闭包 我没有自觉地学习过JavaScript。我必须快点了解 ... -
静态属性和方法
2009-01-05 18:15 1315静态属性和方法 有时,您需要绑定到类而不是实例的属性或方法, ... -
原 型
2009-01-05 17:58 1064原型 在使用JavaScript的面向对象编程中,原型对象 ... -
构造函数而不是类
2009-01-04 23:15 1396构造函数而不是类 前面提到过,有关JavaScript ... -
JavaScript 函数是最棒的
2009-01-04 19:25 1473JavaScript 函数是最棒的 在很多编程语言中,函数和 ... -
insertAdjacentElement方法
2008-12-29 18:08 2472语法: oElement = object . inse ... -
javascript 中定义private 方法
2008-12-26 12:40 2300出处:http://aoqi1883.blog.163.co ... -
event.returnValue和return false的区别
2008-12-25 19:52 26617<!DOCTYPE html PUBLIC " ... -
按“回车”键提交表单
2008-12-25 19:17 2563<!DOCTYPE html PUBLIC " ... -
DWR 同步机制
2008-12-25 19:03 1480被一个小问题所困扰,一直到昨天,我最后 ...
相关推荐
下面通过一个简单的例子来说明如何使用闭包来模拟私有属性和方法: ```javascript function createBook() { var page = 100; // 私有属性,外部不可访问 // 这个函数可以访问私有属性 page function _page() { ...
在JavaScript编程中,私有属性和私有函数是实现封装和数据隐藏的关键概念。这些特性使得我们可以更好地控制代码的访问权限,防止外部直接修改或访问内部状态,从而增强程序的安全性和稳定性。在JavaScript中,虽然...
综上所述,ProtectJS库通过JavaScript的闭包机制实现了模拟私有属性和方法的功能,为开发者提供了更安全、更模块化的代码组织方式。它在浏览器和Node.js环境下均适用,使得私有化编程在JavaScript世界中成为可能。...
3. Symbol:利用Symbol数据类型可以创建唯一的标识符,使用这些标识符作为对象的属性名可以模拟私有属性。这些属性不能通过常规的遍历方法访问,但是它们可以通过`Object.getOwnPropertySymbols`方法被访问到。所以...
如果没有Symbol,我们还可以通过生成随机字符串来模拟私有属性。例如: ```javascript var Person = (function() { var _name = "00" + Math.random(); function Person(name) { this[_name] = name; } ...
3. 面向对象编程的实现:在JavaScript中,通过构造函数、原型、闭包和模拟私有属性等方式来实现面向对象编程。 4. JavaScript中的编码技巧:这包括理解作用域、闭包、异步编程模式、以及如何使用新ES6的特性。 5. ...
JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(除了this和argument
我们介绍了JavaScript对象作为词典的概念、函数的重要性、构造函数与原型、闭包以及如何模拟私有属性和命名空间。这些概念和技术对于任何希望使用现代Web开发技术构建复杂应用的开发者来说都是必不可少的。随着Web...
- Python没有严格的私有属性概念,但是可以通过命名约定和名称改写机制来模拟私有属性的功能。 - 在实际开发中,应该合理利用这些特性来保护类的数据结构,提高程序的可维护性和健壮性。 总之,了解Python中的私有...
总结来说,这个例子展示了如何在JavaScript中通过闭包和构造函数模拟私有属性,以及如何利用`$class`工具函数实现类的继承和私有属性的保护。这种方式虽然不是语言原生支持的私有成员,但可以有效地在类的设计中实现...
同时,通过闭包可以模拟私有属性和方法,静态属性和方法则通过在构造函数上直接定义。理解这些概念对于编写可维护和扩展的JavaScript代码至关重要。在实际开发中,开发者可以根据需求选择合适的继承策略,并灵活运用...
在"08.12-python-共有,私有和特殊方法和属性.ipynb"文件中,可能会详细介绍这些方法的作用,以及如何在森林火灾模拟中使用它们来实现特定行为。 在森林火灾模拟的场景下,共有方法可能包括获取当前森林状态、开始...
同时,它也支持公有和私有属性的概念,公有属性可以直接访问,而私有属性通常只能在类内部访问,这增强了代码的封装性。 其次,继承是面向对象编程的重要特性。`BjaClassTool`允许一个类从另一个类派生,子类可以...
通过使用描述符,可以实现数据验证、缓存计算结果、模拟私有属性等高级功能。在Python的`__get__`、`__set__`和`__delete__`方法中定义描述符,可以控制属性的获取、设置和删除操作。 总之,这个压缩包提供的...
在实际开发中,`Proxy`可以用于实现数据的实时观察、数据的透明化缓存、模拟私有属性等高级功能,极大地丰富了JavaScript的编程模式。对于互联网应用来说,利用`Proxy`优化用户体验、增强数据安全性等方面都有重要...
Python作为一种高级语言,支持类与对象的概念,并提供了一种特殊的命名规则用于模拟私有成员的概念,即通过在属性名前加上两个下划线`__`来表示该属性为私有属性。然而,在实际应用中,这种所谓的“私有属性”并不能...
JavaScript 中的类并没有像 Java 或 C# 那样的严格访问修饰符,但可以通过约定俗成的方式来模拟私有属性和方法,例如使用下划线前缀 `_`(如 `_privateVar`)表示非公开成员。 8. **静态方法和属性** 类还可以...
由于JavaScript中的一切都是公开的,模拟私有属性可以通过闭包来实现。通过闭包,可以隐藏某些变量或方法,使它们只能通过特定的接口访问。 ```javascript function createPerson(name) { var _name = name; // ...