框架封装

如果不使用框架,给页面的标签设置样式
document.getElementsByTagName("div");或者
var dvs = document.querySelectorAll("div"),
for(var i = 0; i < dvs.length; i++) {
dvs[i].style.border = "1px dotted blue";
}
这样写有很多缺点1.一个页面会有很多变量,造成全局变量污染
2.代码冗余 3.无法复用 4.编码繁琐,容易写错

所以需要函数来封装,从而优化代码,封装函数的注意点
1.函数名一般用动词作为开头 2.函数名字要与功能相匹配 3.封装函数要写必要的注释
在JavaScript中函数是一等公民(有很多特权,以及特殊的使用方式)
函数能够当作参数来传递,此时把函数称为:回调函数

封装一个each函数来执行循环的功能
var each = function(arr, callback) {
var i, length = arr.length;
for(i = 0; i < length; i++) {
// 此处,想让this指向:arr[i] 也就是 数组中的每一个元素
// if( callback(i, arr[i]) === false) {
// 第一个arr[i]表示:callback中this的指向
// 第二个arr[i]表示:表示数组中的当前值
if( callback.call(arr[i], i, arr[i]) === false) {
break;
}
}
};
each(arr, function() { //由于each使用了call方法,所有调用函数的时候回调函数的参数可以视情况不写
// console.log(this);
});

严谨的判断 document.getElementsByClassName兼容性的方法
// 1 首先,检验对象中是否具有这个方法
// 2 再检验这个方法的能力是否符合要求

var support = {};
support.getElementsByClassName = function() {
// 用来记录返回值,如果支持就返回true,否则返回false
var isExist = false;
// 判断 getElementsByClassName 是否是一个方法
if(typeof document.getElementsByClassName !== "function") {
return isExist;
}

// 如果是,就执行下面的逻辑
// 这些逻辑就是用来判断这个方法,是否符合我们的要求
// 验证:就是看些通过这个方法获取到的结果,是否是我们需要的DOM对象

// 动态创建一个div元素
var tempDiv = document.createElement("div");
// 生成一个随机的类名,并且保证了这个类名不会跟页面中的类名冲突
// (new Date - 0 )是将日期格式转化为 数值类型
// 也可以使用 +new Date
var clsName = "itcast_" + ( new Date - 0 );
tempDiv.className = clsName;
// 将创建好的元素放到页面中去
document.body.appendChild(tempDiv);

// 判断 通过getElementsByClassName获取到的元素是否跟刚刚创建出来的元素
// 相同
// 如果相同,就说明符合要求,
// 如果不同,就说明不符合要求
var tempRet = document.getElementsByClassName(clsName);
if(tempRet) {
isExist = tempRet[0] === tempDiv;
}

// 把这个元素从页面中移除
document.body.removeChild(tempDiv);

return isExist;
}();

if(support.getElementsByClassName) {
console.log("存在");
} else {
console.log("不存在");
}

jquery中用正则表达式判断getElementsByClassName的兼容性
var support = {};
support.getElementsByClassName = function() {
//get方法的内置的方法,在转化为字符串格式的时候,是一个固定的格式!如果是用户声明的这种格式,会造成语法错误! function getElementsByClassName() { [native code] }
var rnative = /^[^{]+\{\s*\[native \w/;
return rnative.test(document.getElementsByClassName);
}();

时间: 2024-10-18 14:09:28

框架封装的相关文章

java并行调度框架封装及示例

参考资料:  阿里巴巴开源项目 CobarClient  源码实现. 分享作者:闫建忠 分享时间:2014年5月7日 --------------------------------------------------------------------------------------- 并行调度封装类设计: BXexample.java package org.hdht.business.ordermanager.quartzjob; import java.util.ArrayList;

上门洗车APP --- Android客户端开发 之 网络框架封装(二)

上门洗车APP --- Android客户端开发 之 网络框架封装(二) 前几篇博文中给大家介绍了一下APP中的基本业务及开发本项目使用的网络架构: 上门洗车APP --- Android客户端开发 前言及业务简介 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 本篇接着给大家分享网络框架封装,相信感兴趣的朋友已经对上篇博文中的一些开源项目有了些许了解,这里继续为大家介绍关于GenericDataManager 通用网络管理类中的 dataRequest 方法 和

android 开发 - 使用okhttp框架封装的开发框架

概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 oknet是一套基于okhttp的android网络http框架,封装了请求参数处理,日志打印. Github地址 https://github.com/vir56k/oknet 特性 1.简洁的语法 2.支持自定义处理 message code 不等于0 的情形 3.支持文件上传 4.完整清晰的l

【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)

目录: [SSH进阶之路]Struts基本原理 + 实现简单登录(二) [SSH进阶之路]一步步重构MVC实现Struts框架--从一个简单MVC开始(三) [SSH进阶之路]一步步重构MVC实现Struts框架--封装业务逻辑和跳转路径(四) [SSH进阶之路]一步步重构MVC实现Struts框架--彻底去掉逻辑判断(五) [SSH进阶之路]一步步重构MVC实现Struts框架--完善转向页面,大功告成(六) Struts的第二篇博客[SSH进阶之路]Struts基本原理 + 实现简单登录(二

Retrofit源码分析以及MVP框架封装使用

阅读此文前请先阅读Retrofit+okhttp网络框架介绍 从上文中我们已经了解通过如下代码即可得到返回给我们call 以及 response对象,今天我们通过源码来分析这个过程是如何实现的. /** * 获取天气数据 * @param cityname * @param key * @return */ @GET("/weather/index") Call<WeatherData> getWeatherData(@Query("format") S

上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二)

上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二) 前几篇博文中给大家介绍了一下APP中的基本业务及开发本项目使用的网络架构: 上门洗车APP --- Androidclient开发 前言及业务简单介绍 上门洗车APP --- Androidclient开发 之 网络框架封装介绍(一) 本篇接着给大家分享网络框架封装.相信感兴趣的朋友已经对上篇博文中的一些开源项目有了些许了解.这里继续为大家介绍关于GenericDataManager 通用网络管理类中的 data

selenium之多线程启动grid分布式测试框架封装(四)

九.工具类,启动所有远程服务的浏览器 在utils包中创建java类:LaunchAllRemoteBrowsers package com.lingfeng.utils; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set;

selenium之多线程启动grid分布式测试框架封装(一)

一.设计思路 在国内市场上,IE内核的浏览器占据了绝大部分的市场份额,那么此次框架封装将进行IE系列的浏览器进行多线程并发执行分布式测试的封装. 运行时主进程与多线程关系如下: 运行线程通俗的说就是我们用来跑用例的线程,其中<监控线程1>用来监控<运行线程1>的运行状态. 二.前期准备 1.创建一个java工程. 2.导入selenium.dom4j.log4j相关jar包 可到网上自行寻找jar包,也可到我云盘中下载,地址: selenium jar 以及源码jar :http:

上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下网络框架,之前也了解过一些开源网络通讯架构,也大概看了一部分源码,比如Afinal.Volley.AndBase.Android-async-http等,感觉各自都有各自的优劣,自己也曾封装过一些简单的网络架构,感觉有很多地方需要注意和优化,这里就不贴出来献丑了,感兴趣的朋友可以去查阅学习上面所说的

优雅地实现Android主流图片加载框架封装,可无侵入切换框架

项目开发中,往往会随着需求的改变而切换到其它图片加载框架上去.如果最初代码设计的耦合度太高,那么恭喜你,成功入坑了.至今无法忘却整个项目一行行去复制粘贴被支配的恐惧.:) 那么是否存在一种方式 能够一劳永逸地解决这个痛点呢?下面我们来分析一下图片加载框架面对的现状和解决思路. 问题现状 一个优秀的框架一般在代码设计的时候已经封装很不错了,对于开发者而言框架的使用也是很方便,但是为什么说我们往往还要去做这方面的框架封装呢?原因很简单,实际项目开发中,我们不得不面对着日新月异的需求变化,想要在这个变