javascript优化--06模式(对象)01
命名空间:
- 优点:可以解决命名混乱和第三方冲突;
- 缺点:长嵌套导致更长的查询时间;更多的字符;
- 通用命名空间函数:
var MYAPP = MYAPP || {};
MYAPP.namespace = function (ns_string) {
var parts = ns_string.split('.');
parent = MYAPP; if(parts[0] === 'MYAPP') {
parts = parts.slice(1);
}
for(var i = 0; i < parts.length; i++) {
if(typeof parent[parts[i]] === 'undefined') {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
}
var module2 = MYAPP.namespace('MYAPP.modules.module2');
声明依赖关系:虽然已经进行了模块化命名,但再声明依赖能更优化
如对于:MYAPP, MYAPP.util.Event, MYAPP.util.Dom;
//在一个函数或模块顶部进行声明 var myFunc = function() {
var event = MYAPP.util.Event;
var dom = MYAPP.util.Dom;
................
}
解析局部变量的速度比解析全局变量快;
私有属性:
- 私有属性和特权方法:构造函数方法
function Gadget() {
var name = 'iPod';
this.getName = function () {
return name;
}
}注意,如果私有属性设置是一个对象,且只读,那么不要将它直接返回,而是返回其浅复制后的副本;
- 私有属性:对象/匿名即时调用函数
var myobj = (function () {
var name = 'my';
return {
getName: function () {
return name;
}
}
}()); myobj.getName(); - 私有属性:原型 如果是所有创建对象都需要的私有属性,可以设置到原型中
Gadget.prototype = (function () {
var browser = 'Mobile Webkit';
return {
getBrowser: function () {
return browser;
}
}
})
模块模式:
- 组合:
- 命名空间
- 即时函数
- 私有和特权成员
- 声明依赖
- 例子
var MYAPP = {};
MYAPP.namespace = function (ns_string) {
var parts = ns_string.split('.');
parent = MYAPP; if(parts[0] === 'MYAPP') {
parts = parts.slice(1);
}
for(var i = 0; i < parts.length; i++) {
if(typeof parent[parts[i]] === 'undefined') {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
};
MYAPP.namespace('MYAPP.utilities.array');
MYAPP.utilities.array = (function () {
//依赖
var uobj = MYAPP.utilities.object,
ulang = MYAPP.utilities.lang,
//私有属性
array_string= '[object Array]',
ops = Object.prototype.toString,
//...
//私有方法
inArray = function (needle, haystack) {
for(var i = 0, max = haystack.length; i < max; i++) {
if(haystack[i] === needle) {
return true;
}
}
},
isArray = function (a) {
return ops.call(a) === array_string;
}; //可选的一次性初始化过程 //公有API
return {
inArray:inArray,
isArray:isArray,
//...
}
})(); - 例子:使用构造函数
MYAPP.namespace('MYAPP.utilities.Array');
MYAPP.utilities.Array = (function () {
//依赖
var uobj = MYAPP.utilities.object,
ulang = MYAPP.utilities.lang,
//私有属性和方法
Constr; //可选的一次性初始化过程
//.... //公有API-构造函数
Constr = function(o) {
this.elements = this.toArray(o);
};
//公有API-原型
Constr.prototype = {
constructor: MYAPP.utilities.Array,
version: '2.0',
toArray: function (obj) {
for (var i = 0, a = [], len = obj.length; i < len; i++) {
a[i] = obj[i];
}
return a;
}
}
//返回要配置给新空间的构造函数
return Constr;
})();
var arr = new MYAPP.utilities.Array(['a','b']); - 将全局变量导入模块中
MYAPP.utilities.module = (function (app, global) {})(MYAPP, this);
javascript优化--06模式(对象)01的更多相关文章
- javascript优化--10模式(设计模式)01
单体模式:保证一个特定类仅有一个实例;即第二次使用同一个类创建新对象时,应该得到与第一个所创建对象完全相同对象: 在JS中,可以认为每次在使用对象字面量创建对象的时候,实际上就在创建一个单体: 当使用 ...
- javascript优化--07模式(对象)02
沙箱模式: 解决空间命名模式的几个缺点: 命名空间模式中无法同时使用一个应用程序或库的两个版本运行在同一个页面中,因为两者需要相同的全局符号: 以点分割,需要输入更长的字符,解析时间也更长: 全局构造 ...
- javascript优化--08模式(代码复用)01
优先使用对象组合,而不是类继承: 类式继承:通过构造函数Child()来获取来自于另一个构造函数Parent()的属性: 默认模式:子类的原型指向父类的一个实例 function inherit(C, ...
- javascript优化--13模式1(DOM和浏览器模式)
注意分离: 通过将CSS关闭来测试页面是否仍然可用,内容是否依然可读: 将JavaScript关闭来测试页面仍然可以执行正常功能:所有连接是否正常工作:所有的表单是否可以正常工作: 不使用内联处理器( ...
- javascript优化--05模式(函数)
回调函数模式: 基本例子: var findNodes = function (callback) { ...................... if (typeof callback !== ' ...
- javascript优化--11模式(设计模式)02
策略模式 在选择最佳策略以处理特定任务(上下文)的时候仍然保持相同的接口: //表单验证的例子 var data = { firs_name: "Super", last_name ...
- javascript优化--09模式(代码复用)02
原型继承 ://现代无类继承模式 基本代码: var parent = { name : "Papa" } var child = object(parent); function ...
- JavaScript基础06——Math对象和日期对象
内置对象-Math: Math对象用于执行 数学任务,Math 不像 Date 和 String 那样是对象的类,因此没有构造函数Math().无需创建,直接把Math当成对象使用,就可以调用其所有 ...
- javascript优化--12模式(设计模式)03
观察者模式 通过创建一个可观察的对象,当发生一个感兴趣的事件时将该事件通告给所有观察者,从而形成松散的耦合 订阅杂志 //发布者对象 var publisher = { subscribers: { ...
随机推荐
- artEditor增加表单提交功能
摘要: artEditor.js是一款移动端的富文本编辑器,支持图片上传,后面会增加表情.小视频等功能.最近有朋友反馈artEditor是否支持表单提交,当然是支持的,在未开发该功能之前,你可以像下面 ...
- odbc错误信息一览表
ODBC 错误信息 根据 X/Open 和 SQL Access Group SQL CAE 规范 (1992) 所进行的定义,SQLERROR 返回 SQLSTATE 值.SQLSTATE 值是包含 ...
- 深入理解Java中的继承
对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...
- Java Session 介绍;
为什么需要Session 这是为了填补 Http 协议的局限,当用户去访问一个页面,服务端返回完了请求(如,你访问完一个网页,这个页面将页面内容,界面UI呈现给你),就算是结束了,就断开了,服务端不再 ...
- @version ||= version
# -*- encoding : utf-8 -*- class InterfaceBaseController < ActionController::Base private def set ...
- poj3041 二分图最小顶点覆盖
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17237 td>Accepted: 9375 ...
- js中document.documentElement 和document.body 以及其属性 clientWidth等
在设计页面时可能经常会用到固定层的位置,这就需要获取一些html对象的坐标以更灵活的设置目标层的坐标,这里可能就会用到document .body.scrollTop等属性,但是此属性在xhtml标准 ...
- GAE初探-一鼻子灰
考虑到GAE可以一定条件下免费发布app,再加上之前有潜在客户需要用到GAE. 遂决定了解一番. 以比较熟悉的django作为切入点, 1. 首先安装 GAE-launcher,似乎没有太大问题 2. ...
- Java单链表、双端链表、有序链表实现
单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见htt ...
- C++复数四则运算的实现
程序主要实现复数的加减乘,数乘,取共轭功能. 将所有函数都定义为了成员函数. 使用库函数atof将字符串转换为浮点型数据. 函数主要难点在于处理输入.由于需要判断输入是选择退出还是继续,所以用字符串来 ...