JavaScript-创建第一个自己的类库

通过上一节面向对象和原型的学习。我们知道了如何创建一个类,包括类的私有化属性和方法、公有化属性和方法、静态属性和方法。在这里稍微回顾一下。首先要创建一个类可以通过1.new object()。2.利用构造函数function Person(){},然后通过new Person()。还有一种是通过字面量的方式创建一个对象,通过字面量的方式不能使用new运算符,因为他是在内部自己new object()。在这里我们要对类和对象有一定的区分,形象的来说,如果动物是一个类的话,人可以是其中一个对象。就上面的var
person = new Person();这里的Person就是一个类,而person则是他的一个实例化对象,而且可以有很多派生的类,比如Man.prototype = new Person(); var man = new Man();那么这个man也是一个实例化对象。简单的说,类是虚的,而对象是实体的。了解了对象和类的区别之后,我们简单看下如何创建类的私有化,公有化以及静态属性和方法。

面向对象的知识

var a = function(){
     var private1 = 'private1';               //私有字段
     this.public1 = 'public1';               //共有字段,实例字段
     var privateMethod1 = function(){     //私有方法
          alert('privateMethod1');
     }
     this.publicMethod1 = function(obj){     //公共方法,实例方法
          private1 = obj;
     }
     this.publicMethod2 = function(){     //公共方法
          return private1;
     }
}
a.filed1 = 'filed1';                         //公共静态字段
var b1 = new a();
var b2 = new a();
b1.publicMethod1('ss');
console.log(b1.publicMethod2());
console.log(b2.publicMethod2());

****************************************************

var a = (function(){
     //console.log(this);                                   //window对象
     var private1 = 'private1';                              //这个是私有静态属性
     this.public1 = 'public1';
     return function(){
          //console.log(this);                              //object对象
          this.publicMethod1 = function(obj){
               private1 = obj;
          }
          this.publicMethod2 = function(){
               //console.log(this);                         //返回的对象的实例
               return private1;
          }
     }
})();

var b1 = new a();
var b2 = new a();
b1.publicMethod1('s');
console.log(b1.publicMethod2());
console.log(b2.publicMethod2());

第一个类库base.js

了解了基本的面向对象和原型后,我们来封装我们第一个类库。这个类有以下功能:可以通过id,class,tagname获取元素,实现连缀功能,设置css,获取文本等基本的功能:

var $ = function(){
	return new Base();
}

var Base = function(){
	this.elements = [];		//代表元素集合
}

//利用Id获取元素
Base.prototype.fId = function(id){
	this.elements.push(document.getElementById(id));
	return this;
}

//利用tagName获取元素
Base.prototype.fTag = function(tag){
	var eles = document.getElementsByTagName(tag);
	for(var i = 0,len = eles.length; i < len; i++){
		this.elements.push(eles[i]);
	}
	return this;
};

//利用className获取元素
Base.prototype.fClass = function(className){
	var eles = document.getElementsByClassName(className);
	for(var i = 0,len = eles.length; i < len; i++){
		this.elements.push(eles[i]);
	}
	return this;
};

//文本值
Base.prototype.fText = function(str){
	var texts = [];
	//获取innerHTML的值
	function getInnerHTML(i,that){
		texts.push(that.elements[i].innerHTML);
	};
	//设置innerHTML的值
	function setInnerHTML(i,that,str){
		that.elements[i].innerHTML = str;
	};
	//获取nodeValue的值
	function getNodeValue(i,that){
		texts.push(that.elements[i].firstChild.nodeValue);
	};
	//设置nodeValue的值
	function setNodeValue(i,that,str){
		that.elements[i].firstChild.nodeValue = str;
	};
	if(arguments.length === 0){
		typeof this.elements[0].innerHTML != "undefined"?lenFor(getInnerHTML,this):lenFor(getNodeValue,this);
		return texts;
	}else if(arguments.length === 1){
		typeof this.elements[0].innerHTML != "undefined"?lenFor(setInnerHTML,this,str):lenFor(setNodeValue,this,str);
		return this;
	}
};
/*
if(arguments.length === 0){					//如果不输入参数则认为是获取文本值
	if(typeof this.elements[0].innerHTML != "undefined"){
		var getInnerHTML = function(){
			texts.push(this.elements[i].innerHTML);
		}
	}else{
		for(var i = 0,len = this.elements.length; i < len; i++){
			texts.push(this.elements[i].firstChild.nodeValue);
		}
	}
	return texts;
}else if(arguments.length === 1){			//如果输入参数则认为是设置文本值
	if(typeof this.elements[0].innerHTML != "undefined"){
		for(var i = 0,len = this.elements.length; i < len; i++){
			this.elements[i].innerHTML = str;
		}
	}else{
		for(var i = 0,len = this.elements.length; i < len; i++){
			this.elements[i].firstChild.nodeValue = str;
		}
	}
	return this;
}
*/

//设置和获取CSS值
Base.prototype.fCss = function(cssName,cssValue){
	var cssStrs = [];
	//获取getComputedStyle的值
	function getFFStyle(i,that,cssName){
		var style = window.getComputedStyle(that.elements[i]);
		cssStrs.push(style[cssName]);
	};
	//获取currentStyle的值
	function getIEStyle(i,that,cssName){
		var style = that.elements[i].currentStyle;
		cssStrs.push(style[cssName]);
	};
	//设置css的值,其中float为保留字,IE为styleFloat,FF为cssFloat
	function setCss(i,that,cssName,cssValue){
		that.elements[i].style[cssName] = cssValue;
	};
	if(arguments.length === 1){
		typeof window.getComputedStyle != "undefined"?lenFor(getFFStyle,this,cssName):lenFor(getIEStyle,this,cssName);
		return cssStrs;
	}else if(arguments.length === 2){		//设置CSS的值
		lenFor(setCss,this,cssName,cssValue);
		return this;
	}
};

//添加css类选择器
Base.prototype.addCssClass = function(className){
	//获取elements的class值
	function add(i,that,className){
		var name = that.elements[i].className;
		var partern = new RegExp("(^|\\s)" + className + "($|\\s)","g");
		if(!partern.test(name)){
			name += " " +className;
		}
		that.elements[i].className = name;
	};
	lenFor(add,this,className);
	return this;
};

//删除css类选择器
Base.prototype.removeCssClass = function(className){
	//删除elements的class值
	function remove(i,that,className){
		var name = that.elements[i].className;
		var partern = new RegExp("(^|\\s)" + className + "($|\\s)","g");
		that.elements[i].className = name.replace(partern,"");
	};
	lenFor(remove,this,className);
	return this;
};

//对elements进行循环,并执行fn函数
function lenFor(fn,that,str,str1){
	for(var i = 0,len = that.elements.length; i < len; i++){
		fn(i,that,str,str1);
	}
};

这是第一个类库的雏形,还没有进行优化。待日后学习后进行优化。其他的类库将在这个基本库的基础上进行拓展,以增加其功能。

时间: 2024-10-10 07:22:32

JavaScript-创建第一个自己的类库的相关文章

创建ArcGIS API for JavaScript的第一个示例程序

原文:创建ArcGIS API for JavaScript的第一个示例程序 在上一篇博客中已经介绍了如何搭建ArcGIS API for JavaScript开发环境,如果您还没有搭建好开发环境的话,参考博客:http://blog.csdn.net/zdw_wym/article/details/48678913. 如果开发环境搭建好了的话,那么今天我们继续来搭建我们的第一个ArcGIS API for JavaScript应用程序. 下面首先将代码贴出来,复制到VS2012中新建的html

ThinkPHP学习(二)理清ThinkPHP的目录结构及访问规则,创建第一个控制器

ThinkPHP的目录结构 回顾上一篇的安装目录: 目录对应关系 F:\\PHP├─index.php       入口文件├─README.md       README文件├─Application     应用目录├─Public          资源文件目录└─ThinkPHP        框架目录 thinkphp 的目录结构 ThinkPHP 的目录结构非常清晰和容易部署.大致的目录结构如下,以项目为基础进行部署. ┎━ThinkPHP 框架系统目录┃ ┝ ThinkPHP.ph

ASP.NET MVC 03 - 安装MVC5并创建第一个应用程序

不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小玩笑.哈哈.) 参考书籍:<ASP.NET MVC 4 Web编程>.<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业及应用>.度娘谷歌等. -= 安

JavaScript创建类的方式

一些写类工具函数或框架的写类方式本质上都是 构造函数+原型.只有理解这一点才能真正明白如何用JavaScript写出面向对象的代码,或者说组织代码的方式使用面向对象方式.当然用JS也可写出函数式的代码,它是多泛型的. 为了讨论的单一性,暂不考虑类的继承,(私有,受保护)属性或方法.EMCAScript中实际没有类(class)的概念,但可以把它理解为更广义的概念. 1.构造函数方式 /** * Person类:定义一个人,有个属性name,和一个getName方法 * @param {Strin

什么是nodejs?nodejs的作用?创建第一个小实例

以下只是本人的理解如果错误请纠正: 1.nodejs:node是一个平台,是服务器端JavaScript的解析器,nodejs本身运行Google V8 JavaScript引擎,所以速度和性能非常好 2.nodejs旨在解决创建高性能的网络应用程序,可以编写每秒处理上万条同时访问物理机器的连接代码,并且可处理高并发和异步I/O node小实例:创建自己的第一个小实例,我用的是webstorm开发工具 1.编写代码:步骤 (1).引入http模块:require('http') (2).创建ht

JavaScript创建节点

1.JavaScript创建节点 createElement();注:创建元素节点. 例如: var v = document.createElement("p"); createTextNode();注:创建文本节点. 例如: var v = document.createTextNode("大家好"); 2.js节点操作 appendChild();注:给当前节点添加一个子节点 var p = document.createElement("p&quo

Angular4.0安装及创建第一个项目

Angular简介 AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVW(Model-View-Whatever).模块化.自动化双向数据绑定.语义化标签.依赖注入等等. AngularJS 是一个 JavaScript框架.它是一个以 JavaScript 编写的库.它可通过 <script> 标签添加到HTML 页面. Angu

JavaScript 创建DIV 设置样式不起作用,很多都是因为设置样式的顺序问题

JavaScript 创建DIV 设置样式不起作用,很多都是因为设置样式的顺序问题,因为有的样式需要之前设置其他样式才能生效,推荐的样式排序如下: insertDIV:function(){ var divId=document.getElementById("divContainer"); if(divId){ divId.style.display="block";   //作用:一般这种需要设置退出时候就消失了,可以设置display为none隐藏,那么再添加

【VMCloud云平台】SCCM(五)创建第一个集合

继上一篇云平台完成SCCM部署篇之后,SCCM篇正式开始,今天将开始介绍SCCM创建第一个集合,集合作用跟GPO中的作用域是一样的,即有时候你需要对不同范围的机器进行分发操作或其他操作时则需要把范围规定起来(紫色为完成实施,红色为实施中): 1. 打开管理控制台,定位点客户端符合性: 2. 在设备集合上点击右键选择创建设备集合: 3. 输入新集合名称,并选择目标机器所在的集合: 4. 点击下一步,新建成员规则,选择直接规则: 5. 输入资源类型与规则: 6. 接着就会出现筛选出来的值,进行勾选:

Android使用AndEngine创建第一个程序

首先要把andengine.jar复制到libs文件夹里 01 package com.hu.anden; 02   03 import org.anddev.andengine.engine.Engine; 04 import org.anddev.andengine.engine.camera.Camera; 05 import org.anddev.andengine.engine.options.EngineOptions; 06 import org.anddev.andengine.