- 浏览: 704952 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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模拟命名空间
在C++和C#中,命名空间用于尽可能地减少名称冲突。例如,在.NET Framework中,命名空间有助于将Microsoft.Build.Task.Message类与System.Messaging.Message区分开来。JavaScript没有任何特定语言功能来支持命名空间,但很容易使用对象来模拟命名空间。如果要创建一个JavaScript库,则可以将它们包装在命名空间内,而不需要定义全局函数和类,如下所示:
var MSDNMagNS.Pet = function(name) { // code here; }; MSDNMagNs.Pet.prototype.toString = function() { // code }; var pet = new MSDNMagNS.Pet("Yammer");
命名空间的一个级别可能不是唯一的,因此可以创建嵌套的命名空间:
var MSDNMagNS = {}; // nested namespace "Examples" MSDNMagNS.Examples = {}; MSDNMagNS.Examples.Pet = function(name) { // code }; MSDNMagNS.Examples.Pet.prototype.toString = function() { // code }; var pet = new MSDNMagNS.Examples.Pet("Yammer");
可以想象,键入这些冗长的嵌套命名空间会让人很累。幸运的是,库用户可以很容易地为命名空间指定更短的别名:
// MSDNMagNS.Examples and Pet definition... // think "using Eg = MSDNMagNS.Examples;" var Eg = MSDNMagNS.Examples; var pet = new Eg.Pet("Yammer"); alert(pet);
如果看一下Microsoft Ajax库的源代码,就会发现库的作者使用了类似的技术来实现命名空间(请参阅静态方法Type.registerNamespace的实现)。
OOP 和 ASP.NET AJAX
在ASP.NET AJAX中实现的OOP与在本文中讨论的规范实现稍有不同,这主要有两个原因:ASP.NET AJAX版本提供了更多反射可能性(它是诸如 xml 脚本等声明性语法和参数验证所必需的),而且ASP.NET AJAX的目标是将使用.NET的开发人员所熟悉的某些其它构造(例如属、事件、枚举和接口)转换成JavaScript。
在JavaScript当前广泛使用的版本中,它缺少.NET开发人员所熟悉的几个OOP的关键概念,而ASP.NET AJAX可以模拟其中的大多数。
根据命名约定(要遵守的示例),类可以有属性访问器,以及多播事件(符合紧密反映由.NET提供的约定的模式)。私有变量遵守成员以下划线开头则为私有的约定。很少有机会用到真正的私有变量,此策略是为了使调试程序能够监测到这些变量。引入接口也是为了使类型检查能够避免常见的鸭子定型法(一种类型方案,它基于的概念是:如果有什么物体走路和叫声像鸭子,那么它就是鸭子,或至少可以将它视为鸭子)。
类和反射
在JavaScript中,没有办法知道函数的名称。即使这是可能的,但在大多数情况下也没有什么用,因为类构造函数通常是通过向命名空间变量分配匿名函数来构造的。实际构成类型名称的是此变量的完全限定名称,它同样不可访问,并且构造函数本身对它一无所知。为了规避此限制,并使JavaScript类有丰富的反射,ASP.NET AJAX需要将类型名称进行注册。
ASP.NET AJAX中反射的API将检查所有类型(无论是内置类型、类、接口、命名空间或者甚至是枚举),而它们包括的类似.NET Framework 的函数(例如 isInstanceOfType和inheritsFrom)可以在运行时检查类的层次结构。ASP.NET AJAX 还会在调试模式下执行某些类型检查,这对开发人员更早的捕获Bug很有帮助。
注册类层次结构和调用基础函数
若要在ASP.NET AJAX中定义类,您需要将其构造函数赋给变量(注意,构造函数如何调用举出函数):
MyNamespace.MyClass = function() { MyNamespace.MyClass.initializeBase(this); this._myProperty = null; } Then, you need to define the class members itself in its prototype: MyNamespace.MyClass.prototype = { get_myProperty:function() { return this._myProperty; }, set_myProperty:function(value) { this._myProperty = value; }, doSomething: function() { MyNamespace.MyClass.callBaseMethod(this,"doSomething"); /* do something more */ } } 最终注册类: MyNamespace.MyClass.registerClass("MyNamespace.MyClass", MyNamespace.BaseClass); 此处不需要管理构造函数和原型层次结构,因为这由registerClass函数自动完成。 Bertrand Le Roy 是 ASP.NET AJAX 团队的软件设计工程师 II。
发表评论
-
JavaScript 代码压缩工具
2011-02-16 15:15 931见附件,免费工具。 -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2009-11-26 13:38 10704在服务器端判断request来自Ajax请求(异步)还是传 ... -
转:用Javascript来关闭IE浏览器和FireFox浏览器
2009-06-03 11:08 2173原文地址:http://hi.baidu.com/suen ... -
JavaScript 解析 JSON
2009-02-25 20:36 0JSON (JavaScript Object Not ... -
JavaScript的四舍五入运算
2009-02-02 13:49 1769function ForDight(Dight,How) { ... -
JavaScript 使用面向对象的技术创建高级 Web 应用程序
2009-01-19 21:44 1510转载: JavaScript 使用面 ... -
在JavaScript中使用面向对象
2009-01-18 17:05 1122原文地址:http://www.cnblo ... -
应当这样编写 JavaScript 代码吗?
2009-01-17 23:09 1119应当这样编写 JavaScript 代码吗? 您已经看到Ja ... -
JavaScript 从类继承
2009-01-17 17:32 1272从类继承 到这里,我们已经了解了构造函数和原型对象如何使您在 ... -
模拟私有属性
2009-01-07 15:46 1127模拟私有属性 现在介绍闭包如何帮助模拟私有成员。正常情况 ... -
闭 包
2009-01-07 15:10 1237闭包 我没有自觉地学习过JavaScript。我必须快点了解 ... -
静态属性和方法
2009-01-05 18:15 1309静态属性和方法 有时,您需要绑定到类而不是实例的属性或方法, ... -
原 型
2009-01-05 17:58 1057原型 在使用JavaScript的面向对象编程中,原型对象 ... -
构造函数而不是类
2009-01-04 23:15 1391构造函数而不是类 前面提到过,有关JavaScript ... -
JavaScript 函数是最棒的
2009-01-04 19:25 1468JavaScript 函数是最棒的 在很多编程语言中,函数和 ... -
insertAdjacentElement方法
2008-12-29 18:08 2468语法: oElement = object . inse ... -
javascript 中定义private 方法
2008-12-26 12:40 2295出处:http://aoqi1883.blog.163.co ... -
event.returnValue和return false的区别
2008-12-25 19:52 26602<!DOCTYPE html PUBLIC " ... -
按“回车”键提交表单
2008-12-25 19:17 2555<!DOCTYPE html PUBLIC " ... -
DWR 同步机制
2008-12-25 19:03 1477被一个小问题所困扰,一直到昨天,我最后 ...
相关推荐
这导致了JavaScript开发者需要寻找其它方法来模拟命名空间,以解决作用域污染和全局变量冲突的问题。 利用JavaScript的对象,我们可以轻松模拟出命名空间的效果。对象在JavaScript中可以作为一种容器,用来存储函数...
本篇文章将深入探讨如何在JavaScript中模拟jQuery的命名空间,以实现更有序、更安全的代码组织。 首先,我们需要理解JavaScript的命名空间是如何工作的。由于JavaScript本身没有内置的命名空间机制,我们通常通过...
JavaScript 本身并不直接支持命名空间的概念,但可以通过对象和闭包来模拟实现。以下是一些实现命名空间的常见方法: 1. **对象嵌套**: 在给定的示例中,`com.anyjava` 是一个命名空间,它通过对象嵌套的方式创建...
在JavaScript这种没有原生命名空间支持的语言中,通过创建一个全局对象并将所有功能附加到这个对象下面,可以模拟实现类似命名空间的效果。这种方式通常用于大型项目或库,以保持代码的整洁和可维护性。 在描述中...
然而,JavaScript并没有原生支持命名空间,但它可以通过模拟实现,常见的方法有对象字面量、立即执行函数表达式(IIFE)和模块化(如CommonJS、ES6模块)等。 1. 对象字面量:这是一种创建命名空间的简单方式,通过...
因此,开发者通常会使用对象字面量的方式来模拟命名空间,即所谓的“伪命名空间”。这种方式可以有效地组织代码,减少全局变量的使用,使代码更加模块化。 #### 四、结合自执行函数与伪命名空间 通过结合自执行函数...
在 JavaScript 中,没有命名空间的概念,需要使用对象来模拟命名空间。下面是一个基本的命名空间实现方法: 1. 定义一个构造函数,用于创建命名空间: ``` function NameSpace(){} ``` 2. 创建一个命名空间对象: `...
在JavaScript中,我们可以使用对象来模拟命名空间。例如,我们创建一个构造函数`NameSpace`,它实际上不执行任何操作,但可以用来创建一个新的命名空间: ```javascript function NameSpace() {} ``` 然后,我们...
首先,我们来看看如何模拟命名空间。命名空间的主要目的是避免全局变量污染,提高代码的可读性和可维护性。在JavaScript中,可以使用对象字面量或函数来模拟命名空间: 1. 对象字面量方式: ```javascript ...
但在JavaScript中,通常使用函数作用域来模拟命名空间的行为。 由于JavaScript的函数作用域特性,所有的变量和函数都属于这个作用域,而JavaScript中的块级作用域(例如使用if语句或循环创建的作用域)并不会创建一...
尽管JavaScript原生并不支持命名空间,但是开发者可以使用一些技巧来模拟命名空间的效果。以下是一些关于如何在JavaScript中简单实现命名空间效果的知识点: 1. 命名空间定义:在JavaScript中,可以通过创建对象...
由于JavaScript没有内置的命名空间或包管理机制,开发者通常通过模拟实现这一概念。在提供的例子中,`MYAPP` 是一个全局对象,用作整个应用程序的命名空间。 创建命名空间的常见方法是使用对象属性来模拟层级结构。...
在JavaScript中虽然没有像Java或者.NET那样的命名空间声明,但通过约定俗成的方式来模拟命名空间,以避免全局作用域中变量名的冲突。下面将详细介绍如何在JavaScript中创建和使用命名空间。 首先,命名空间在...
JavaScript 本身不支持命名空间的概念,但可以使用对象来模拟命名空间。我们可以定义一个构造函数,例如 `NameSpace`,然后使用该构造函数创建一个命名空间对象。例如: ``` function NameSpace() {} ``` 接着,...
这个过程是通过`eval`函数来完成的,虽然`eval`通常被视为危险函数,但在这种特定情况下,它用于在当前作用域内执行字符串形式的JavaScript代码,以创建或引用命名空间对象。 例如,我们可以这样注册几个命名空间:...