JavaScript面向对象编程(12)对js进行简单封装

虽然现在很多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;
}
时间: 2024-10-04 05:50:17

JavaScript面向对象编程(12)对js进行简单封装的相关文章

《JavaScript面向对象编程指南》读书笔记②

概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的知识点,以后再看也可当做拾遗之用! 内容 1.枚举属性用for-in循环显示. 2.当我们对对象的prorotype属性进行完全重写时,有可能会对对象constructor属性产生一定的负面影响. 3.uber--子对象访问父对象的方式Triangle.uber = TwoDShape.prototype 4

[Javascript] 面向对象编程思想

1.创建对象 1.1 new 用new进行创建对象: var user = new Object(); user.age = 12;//同时为对象添加属性 user.name = 'ajun'; 1.2{} 用{}创建对象,如: var user = { 'name':'ajun, 'age':12 } 这里同时候为user添加了两个属性分别为:name,age 在以上代码稍加改造,你还可以为一个对象添加一个方法,如: var user = { 'name':'ajun', 'age':12 '

Javascript面向对象编程(二):构造函数的继承

这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = "动物"; } 还有一个"猫"对象的构造函数. function Cat(name,color){ this.name = name; this.color = col

Javascript 面向对象编程(一):封装

学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学习笔记,希望对大家学习这个部分有所帮助.我主要参考了以下两本书籍: <面向对象的Javascript>(Object-Oriented JavaScript) <Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd

再谈javascript面向对象编程

前言:虽有陈皓<Javascript 面向对象编程>珠玉在前,但是我还是忍不住再画蛇添足的补上一篇文章,主要是因为javascript这门语言魅力.另外这篇文章是一篇入门文章,我也是才开始学习Javascript,有一点心得,才想写一篇这样文章,文章中难免有错误的地方,还请各位不吝吐槽指正 吐槽Javascript 初次接触Javascript,这门语言的确会让很多正规军感到诸多的不适,这种不适来自于Javascript的语法的简练和不严谨,这种不适也 来自Javascript这个悲催的名称,

JavaScript面向对象编程深入分析

二. Javascript 面向对象编程:构造函数的继承 本节主要介绍,如何生成一个"继承"多个对象的实例. 比如,现在有一个"动物"对象的构造函数, function Animal(){ this.species = "动物"; } 还有一个"猫"对象的构造函数, function Cat(name,color){ this.name = name; this.color = color; } 怎样才能使"猫&qu

JavaScript 面向对象编程

写的项目需要把js封装处理,不然很乱..然后就想到前端大神阮一峰了,去blog搜索一下果然有收获 参考文章: Javascript定义类(class)的三种方法 Javascript 面向对象编程(一):封装 此处使用极简主义法: 如何定义一个类: 此法是定义一个生成器以及构造函数(类似工厂模式吧) var Cat = { createNew: function(){ var cat = {}; cat.name = "大毛"; cat.makeSound = function(){

【转】Javascript 面向对象编程(一):封装

原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果我们要把"属性"(property)和"

Javascript 面向对象编程:封装

学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. ============================ Javascript 面向对象编程(一):封装 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果我们要把"属性"

Javascript 面向对象编程(一):封装 by 阮一峰

<Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Javascript读物,推荐阅读. 笔记分成三部分.今天的第一部分是讨论"封装"(Encapsulation),后面的第二部分和第三部分讨论"继承"(Inheritance). ============================ Javascript 面向对象编程(一)