JavaScript面向对象编程(12)对js进行简单封装
2014-12-25 11:49
337 查看
虽然现在很多js框架如jQuery都做得很好,但是从学习的角度来说,我们还是应该把js基础打牢固。
既然js是面向对象的,我们就可以利用封装,将一些固定的逻辑写在通用function里面。
下面的代码在不适用js框架的情况下可大大提高编程效率,而且可以遵循这个思路写更多的function。
// JavaScript Document
//$("#someid");
function $(id){
var s = new String(id);
if(/^#/.test(s)){
return document.getElementById(s.substring(1));
}else{
return document.getElementsByTagName(s);
}
}
/**
给对象绑定事件监听器
eventTarget 目标对象
eventType 事件名称,click/mouseover
eventHandler 函数对象
*/
function listenEvent(eventTarget, eventType, eventHandler) {
if (eventTarget.addEventListener) {
eventTarget.addEventListener(eventType, eventHandler,false);
} else if (eventTarget.attachEvent) {
eventType = "on" + eventType;
eventTarget.attachEvent(eventType, eventHandler);
} else {
eventTarget["on" + eventType] = eventHandler;
}
}
function stopListening (eventTarget,eventType,eventHandler) {
if (eventTarget.removeEventListener) {
eventTarget.removeEventListener(eventType,eventHandler,false);
} else if (eventTarget.detachEvent) {
eventType = "on" + eventType;
eventTarget.detachEvent(eventType,eventHandler);
} else {
eventTarget["on" + eventType] = null;
}
}
//增加onload事件处理函数
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
//给目标元素添加css类
function addClass(element,value) {
if (!element.className) {
element.className = value;
} else {
newClassName = element.className;
newClassName+= " ";
newClassName+= value;
element.className = newClassName;
}
}
function setClass(element,value){
element.className = value;
}
String.prototype.trim = function(){
return this.replace(/^\s+|\s+$/igm,'');
}
//扩展element,添加一个after方法,在元素后面增加html内容
Element.prototype.after=function(text){
var oldHTML = this.parentNode.innerHTML;
this.parentNode.innerHTML = oldHTML+text;
}
//扩展element,添加一个append方法
Element.prototype.append=function(text){
var oldHTML = this.innerHTML;
this.innerHTML = oldHTML+text;
}
//继承“原型”
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
//--->类式继承,使用方式 TwoDShape.extend(Shape),类似于extend(TwoDShape,Shape)
Function.prototype.extend=function(superClass){
if(typeof superClass !== 'function'){
throw new Error('fatal error:Function.prototype.extend expects a constructor of class');
}
var F = function(){}
F.prototype = superClass.prototype;
this.prototype = new F();
this.prototype.constructor = this;
this.uber = superClass;
return this;
}
//拷贝属性
function extendCopy(p) {
var c = {};
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
//深度拷贝
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
//拷贝父对象为prototype
function object(o) {
var n;
function F() {}
F.prototype = o;
n = new F();
n.uber = o;
return n;
}
既然js是面向对象的,我们就可以利用封装,将一些固定的逻辑写在通用function里面。
下面的代码在不适用js框架的情况下可大大提高编程效率,而且可以遵循这个思路写更多的function。
// JavaScript Document
//$("#someid");
function $(id){
var s = new String(id);
if(/^#/.test(s)){
return document.getElementById(s.substring(1));
}else{
return document.getElementsByTagName(s);
}
}
/**
给对象绑定事件监听器
eventTarget 目标对象
eventType 事件名称,click/mouseover
eventHandler 函数对象
*/
function listenEvent(eventTarget, eventType, eventHandler) {
if (eventTarget.addEventListener) {
eventTarget.addEventListener(eventType, eventHandler,false);
} else if (eventTarget.attachEvent) {
eventType = "on" + eventType;
eventTarget.attachEvent(eventType, eventHandler);
} else {
eventTarget["on" + eventType] = eventHandler;
}
}
function stopListening (eventTarget,eventType,eventHandler) {
if (eventTarget.removeEventListener) {
eventTarget.removeEventListener(eventType,eventHandler,false);
} else if (eventTarget.detachEvent) {
eventType = "on" + eventType;
eventTarget.detachEvent(eventType,eventHandler);
} else {
eventTarget["on" + eventType] = null;
}
}
//增加onload事件处理函数
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
//给目标元素添加css类
function addClass(element,value) {
if (!element.className) {
element.className = value;
} else {
newClassName = element.className;
newClassName+= " ";
newClassName+= value;
element.className = newClassName;
}
}
function setClass(element,value){
element.className = value;
}
String.prototype.trim = function(){
return this.replace(/^\s+|\s+$/igm,'');
}
//扩展element,添加一个after方法,在元素后面增加html内容
Element.prototype.after=function(text){
var oldHTML = this.parentNode.innerHTML;
this.parentNode.innerHTML = oldHTML+text;
}
//扩展element,添加一个append方法
Element.prototype.append=function(text){
var oldHTML = this.innerHTML;
this.innerHTML = oldHTML+text;
}
//继承“原型”
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
//--->类式继承,使用方式 TwoDShape.extend(Shape),类似于extend(TwoDShape,Shape)
Function.prototype.extend=function(superClass){
if(typeof superClass !== 'function'){
throw new Error('fatal error:Function.prototype.extend expects a constructor of class');
}
var F = function(){}
F.prototype = superClass.prototype;
this.prototype = new F();
this.prototype.constructor = this;
this.uber = superClass;
return this;
}
//拷贝属性
function extendCopy(p) {
var c = {};
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
//深度拷贝
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
//拷贝父对象为prototype
function object(o) {
var n;
function F() {}
F.prototype = o;
n = new F();
n.uber = o;
return n;
}
相关文章推荐
- js中用数组对一些验证进行简单的封装
- php简单封装了一些常用JS操作
- 使用jQuery.pager.js进行无刷新分页(当然想带刷新的话更简单)
- Js~对Boxy弹出框进行封装,提供弹出后自动隐藏与自动跳转功能
- 使用闭包对setTimeout进行简单封装避免出错
- 使用C++进行WMI查询的简单封装
- 用js来进行简单的加减乘除运算
- 《php---ajax简单示例---jquery内部运行原理》---jquery只是就ajax的一些功能进行了封装
- 对Pthread线程进行简单的类封装
- 1个比较简单的使用java反射机制获取前台数据进行数据封装的例子
- 对回调函数进行简单封装
- 对libpq进行简单的c++封装
- 对libpq进行简单的c++封装
- 简单封装js的dom查询
- JS简单动画封装浅析
- 对tabtrip的简单封装 js的querystring Request.QueryString
- 利用js事件进行简单的表格操作
- JS简单动画封装
- Node.JS进行简单新技术分析及环境搭建
- 用bolck对ASIHttpRequst进行简单的封装