javascript的对象创建模式---命名空间模式
javascript中对象的概念是很普遍的,对象是是对象,数组是对象,函数也是对象,字符串其实也是对象。常见的对象创建方法有对象字面量、构造函数创建。我们先来看看对象的创建还有哪些更高级的模式。
一、命名空间模式
二、模块模式
三、沙箱模式
四、链模式
命名空间模式
什么是命名空间模式咧?简单的说就是为了避免出现过多的全局变量,将多个变量作为某一个全局变量的属性存在。
比如:
function brother1(){};
function brother2(){};
这样的两个函数直接作为了window的属性成为了全局变量,如果改成这样:
var parent={};
parent.brother1=function(){};
parent.brother2=function(){};
两个brother变成了一个全局变量的属性,保护了全局变量不被污染。
命名空间模式的好处是:
1、减少全局变量污染,只建立一个全局变量,把其他的所有功能函数、变量放到这个全局变量下,适合库的建立,比如jquery。
2、组织代码更规范。
当然命名空间模式也有一些缺点:
1、更长的字符串名称,每个变量和函数都需要有一个前缀,增加了代码的大小;
2、长嵌套意味着更长的属性解析时间。
通用命名空间函数
var MYAPP = MYAPP||{};
MYAPP.namespace=function(ns){
var parts = ns.split("."),parent=MYAPP,i;
if(parts[0]=="MYAPP"){
parent=parts.slice(1);
}
for(i=0;i<parts.length;i++){
if(typeof parent[parts[0]]=="undefined"){
parent[parts[i]]={};
}
parent=parent[parts[i]];
}
};
javascript的对象创建模式---命名空间模式的更多相关文章
- JavaScript基础对象创建模式之命名空间(Namespace)模式(022)
JavaScript中的创建对象的基本方法有字面声明(Object Literal)和构造函数两种,但JavaScript并没有特别的语法来表示如命名空间.模块.包.私有属性.静态属性等等面向对象程序 ...
- JavaScript基础对象创建模式之模块模式(Module Pattern)(025)
模块模式可以提供软件架构,为不断增长的代码提供组织形式.JavaScript没有提供package的语言表示,但我们可以通过模块模式来分解并组织 代码块,这些黑盒的代码块内的功能可以根据不断变化的软件 ...
- JavaScript基础对象创建模式之沙盘模式(026)
沙盘模式可以弥补命名空间模式中的两项不足之处: 使用唯一全局对象作为程序的全局变量入口,使得无法在同一程序中使用两个不同版本的API,因此它们使用的是同一个唯一的全局对象名,如MYAPP: 较长的嵌套 ...
- JavaScript基础对象创建模式之单体/单例模式(Singleton)
首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大 ...
- JavaScript基础对象创建模式之静态成员(027)
在支持“类”的面向对象语言中,静态成员指的是那些所有实例对象共有的类成员.静态成员实际是是“类”的成员,而非“对象”的成员.所以如果 MathUtils类中有个叫 max()的静态成员方法,那么调用这 ...
- JavaScript基础对象创建模式之私有属性和方法(024)
JavaScript没有特殊的语法来表示对象的私有属性和方法,默认的情况下,所有的属性和方法都是公有的.如下面用字面声明的对象: var myobj = { myprop: 1, getProp: f ...
- JavaScript基础对象创建模式之声明依赖模式(023)
运用了命名空间(Namespace)模式后, 就可以使用一些JavaScript库了,比如YAHOO作用YUI2库的全局对象,可以通过 YAHOO.util.Dom 和 YAHOO.util.Even ...
- JavaScript基础对象创建模式之链式调用模式(Chaining Pattern)(029)
链式调用模式允许一个接一个地调用对象的方法.这种模式不考虑保存函数的返回值,所以整个调用可以在同一行内完成: myobj.method1("hello").method2().me ...
- JavaScript基础对象创建模式之对象的常量(028)
虽然许多编程语言提供了const关键字来支持常量的声明,但JavaScript里没有表示常量的语义.我们可以用全大写的方式来声明变量,表明它实际上是个常量: Math.PI; // 3.1415926 ...
随机推荐
- opencv学习笔记(六)---图像梯度
图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...
- K3 Wise 常用表【转载】
在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单.--事务类型select * from ICClassType where FT ...
- sharding-jdbc数据分片配置
数据分片 不使用Spring 引入Maven依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> ...
- Java实现二维码生成的方法
1.支持QRcode.ZXing 二维码生成.解析: package com.thinkgem.jeesite.test; import com.google.zxing.BarcodeFormat; ...
- liunx php 安装 redis 扩展
切换到安装目录: cd /usr/local/ 下载php redis扩展:wget http://pecl.php.net/get/redis-2.2.8.tgz 更改名称压缩包名称: mv re ...
- Apache Shiro(六)-基于URL配置权限
数据库 先准备数据库啦. DROP DATABASE IF EXISTS shiro; CREATE DATABASE shiro DEFAULT CHARACTER SET utf8; USE sh ...
- scrapy框架的另一种分页处理以及mongodb的持久化储存以及from_crawler类方法的使用
一.scrapy框架处理 1.分页处理 以爬取亚马逊为例 爬虫文件.py # -*- coding: utf-8 -*- import scrapy from Amazon.items import ...
- Spring Cload
Spring Cloud 从入门到精通 转载: https://blog.csdn.net/valada/article/details/80892573 https://gitbook.cn/git ...
- Source Insight 4.0的使用(转)
原作者地址:https://blog.csdn.net/qq_39660930/article/details/77499455 一.项目管理 1.新建一个项目 快捷键Alt+Shift+N可以打开新 ...
- PIXI 下落文字消除(3)
图片示例,简陋的图,记录下落过程, 1.创建应用实例并添加到DOM元素上. (会看到一个黑色画布,没有任何元素,接下来会在画布上创建文字) 2.创建 TextStyle 用来设置要显示字体样式 3. ...