`

JavaScript重构(十):强化对象封装和模块封装

阅读更多

1、类本身就是一种封装形式,先来看看最简单的封装,JavaScript中没有private关键字,对于私有成员,不如我们统一一个以下划线开头的命名来标识:

var User = function(name){
	this._name = name;
	this.getName = function(){
		return _name;
	};
};

 

 

2、不过,上面的办法还不够好,我依然可以用user._name访问到这个变量。现在换个思路,通过使用var来定义User中的name属性,并且通过getName方法来给它暴露访问入口,实现了private一样的效果:

var User = function(name){
	var name = arguments[0];
	this.getName = function(){
		return name;
	};
};
User.SORT = 1;

var user = new User("Test");
alert(user.getName());	//正确打印
alert(user.name);		//封装起来的私有成员,不能随意访问
alert(User.SORT);		//类变量

 

 

3、通过匿名方法,把代码块的影响范围限制在一定区域内:

(function($){
	$.fn.extend({
		sayHi : function(){
			alert("Hi: " + this.get(0).tagName);
		}
	});
})(jQuery);

jQuery("body").sayHi();

 上例中,外部由于命名冲突的关系,无法使用“$”来获取jQuery的引用,但是通过这样匿名函数的调用,在函数实现内部依然可以使用到“$”,并且给JQuery的原型增加了一个sayHi的方法。

 

 

4、命名空间带来的封装,参见这篇博客。

 

 

5、通过合理规约JS文件的依赖关系和加载执行顺序,保证区域代码执行时对外部的访问范围:

//首先加载URLUtil的类定义,再加载User的类定义,保证了依赖关系是User依赖于URLUtil,而不会倒置,避免了在URLUtil的代码区域附近去访问User对象
var URLUtil = {
	getURL : function(){
		return "http://xxx";
	}
};

……

var User = function(){
	var url;
	this.setURL = function(newUrl){
		url = newUrl;
	};
};

……

var user = new User();
user.setURL(URLUtil.getURL());

 

 

JavaScript重构系列,请访问此链接

 

文章系本人原创,转载请注明作者和出处

3
0
分享到:
评论

相关推荐

    worldwindjava源码-javascript-oop:面向对象编程和面向对象JavaScript

    世界风java源码JavaScript 中的面向对象编程 学习目标 使用构造函数生成特定类型的对象。 使用构造函数将属性附加到新对象。 回想一下在构造函数中定义方法的成本。 通过将自定义对象附加到原型来定义自定义对象的...

    see-ajax:一个ajax封装器,能够对响应Json对象进行重构,预先请求对象,后置处理响应数据等。 Ajax包装器,具有响应重构,预处理,后处理等

    看见ajax一个ajax封装器,能够对Json对象进行重构,预先请求对象,后置处理响应数据等。依赖相关注意仅适用于json数据响应。快速开始npm install see-ajax --saveimport seeAjax from 'see-ajax';// 配置应用seeAjax...

    wRegexpObject:封装普通逻辑组合(expression)和正则表达式的类,可将其应用于字符串以判断字符串是否满足正则表达式和逻辑

    封装了琐碎的逻辑组合(expression)和正则表达式的类,可以将其应用于字符串以判断该字符串是否满足正则表达式和逻辑。 RegexpObject提供了以下功能:组合,组合该类的多个实例,对其进行扩展,应用于字符串等。 ...

    reduxModuleCreator:创建正交的Redux模块

    不再需要为减速器,动作和选择器四处乱搞-所有这些都在模块内; 可以在不同的项目或平台中使用相同的模块-内部包含所有逻辑; 可以更改存储数据层次结构,而无需重构使用它的每个视图。 删除路径依赖项: 是的...

    procedural-to-oo-javascript

    这个挑战要求您采用一些过程代码并将其重构为面向对象JavaScript。 从source目录中的此框架开始并对其进行重构。 ##发布 ###发布0: 使用对象重构ile-O Javascript。 尽可能少地放到全球范围内! 为所有匿名...

    井字游戏:JavaScript井字游戏

    JavaScript井字游戏 这是The Odin Project的... 创建专用功能和封装逻辑会创建一个环境,该环境更易于重构和测试,并且难以使用。 关键词 CSS,JavaScript,Vanilla,DOM操作,工厂功能,模块模式,IIFE,闭包,范围

    oojs-refactor

    P6 JavaScript 将程序重构为面向对象##学习能力在对象之间实现干净灵活的接口多维度分解问题,包括(但不限于):关注点分离、迪米特法则、使用频率、变化频率、封装、松耦合、单一职责原则编写面向对象的 ...

    JavaScript面向对象分层思维全面解析

    js本身不是面向对象语言,在我们实际开发中其实很少用到面向对象思想,以前一直以为当要复用的时候才封装成对象,然而随着现在做的项目都后期测试阶段发现面向对象的作用不仅仅只是复用,可能你们会说面向对象还有继承,...

    asp.net知识库

    Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...

    protractor-pageobject:量角器的页面对象模式实现

    将您的页面或组件交互和选择器封装在类中 允许抽象测试页面中的元素和组件,这有助于在更改 html 结构时进行重构。 允许轻松设置输入字段 安装 npm install --save-dev protractor-pageobject 例子 检查。 有关更...

    js-separation-of-concerns

    通过将信息封装在具有明确定义的接口的代码段中,可以实现模块化,从而实现关注点分离。 关注点分离的价值在于简化计算机程序的开发和维护。 当关注点分开时,各个部分可以重复使用,也可以独立开发和更新。 具有...

    js_separation_of_concerns

    通过将信息封装在具有明确定义的接口的代码段中,可以实现模块化,从而实现关注点分离。 关注点分离的价值在于简化计算机程序的开发和维护。 当关注点分开时,各个部分可以重复使用,也可以独立开发和更新。 具有...

    Ext Js权威指南(.zip.001

    1.2.4 在javascript中使用json / 4 1.2.5 在.net中使用json / 8 1.2.6 在java中使用json / 12 1.2.7 更多有关json的信息 / 15 1.3 ext js 4概述 / 15 1.4 ext js的开发工具的获取、安装与配置介绍 / 18 1.4.1...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包10

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics