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);
}
};
这是第一个类库的雏形,还没有进行优化。待日后学习后进行优化。其它的类库将在这个基本库的基础上进行拓展。以添加其功能。
JavaScript-创建第一个自己的类库的更多相关文章
- 创建ArcGIS API for JavaScript的第一个示例程序
原文:创建ArcGIS API for JavaScript的第一个示例程序 在上一篇博客中已经介绍了如何搭建ArcGIS API for JavaScript开发环境,如果您还没有搭建好开发环境的话 ...
- ASP.NET MVC 5 03 - 安装MVC5并创建第一个应用程序
不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小 ...
- ThinkPHP学习(二)理清ThinkPHP的目录结构及访问规则,创建第一个控制器
ThinkPHP的目录结构 回顾上一篇的安装目录: 目录对应关系 F:\\PHP├─index.php 入口文件├─README.md README文件├─Applicatio ...
- 你不知道的javaScript上卷(第一章 作用域是什么)
在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. ...
- Angular安装及创建第一个项目
Angular简介 AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJ ...
- Ionic学习记录(一):ionic及cordova安装、创建第一个应用、项目结构
目录: 一.ionic的安装 二.创建第一个应用程序 三.浏览器中预览应用 四.项目结构 五.添加页面 一.ionic的安装 使用Ionic创建和开发应用程序主要通过Ionic命令行实用程序(“CLI ...
- AngularJs轻松入门(一)创建第一个应用
AngularJs是Google工程师研发的一款JS框架,官方文档中对它的描述是,它是完全使用JavaScript编写的客户端技术,同其他历史悠久的Web技术(HTML,CSS等)配合使用,使得Web ...
- 如何在前端通过JavaScript创建修改CAD图形
背景 在之前的博文CAD图DWG解析WebGIS可视化技术分析总结.CAD_DWG图Web可视化一站式解决方案-唯杰地图-vjmap中讲解了如何把CAD的DWG格式的图纸Web可视化的方案,那在Web ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- BI之SSAS完整实战教程3 -- 创建第一个多维数据集
上一篇我们已经完成了数据源的准备工作,现在我们就开始动手,创建第一个多维数据集(Cube). 文章提纲 使用多维数据集向导创建多维数据集 总结Cube设计器简介 维度细化 总结 一.使用向导创建多维数 ...
随机推荐
- 什么是JavaScript框架-------share
摘要:现代网站和web应用程序趋向于依赖客户端的大量的javascript来提供丰富的交互.特别是通过不刷新页面的异步请求来返回数据或从服务器端的脚本(或数据系统)中得到响应.在这篇文章中,你将会了解 ...
- 【详●析】[GXOI/GZOI2019]逼死强迫症
[详●析][GXOI/GZOI2019]逼死强迫症 脑子不够用了... [题目大意] 在\(2\times N\)的方格中用\(N-1\)块\(2\times 1\)的方砖和\(2\)块\(1\tim ...
- [模板] Miller-Rabin 素数测试
细节挺多的.. #include<iostream> #include<cstdlib> #include<cstdio> #include<ctime> ...
- Specified VM install not found: type Standard VM, name JDK1.8
真正的问题解决方法在这里:在项目中,右键点击ant文件,选择Run As -- External Tools Configuration,在这个页面的顶端就会看到有红叉叉的报错,报错信息就是Speci ...
- jquery取当前节点的上级ID
- 七牛云 GO 语言周报【七月第 2 期】
全世界有多少 Gopher? 上周的周报中,我们介绍了 Go 语言的排名已经进入到前十.那么世界上到底有多少 Gopher 呢? 作者列出了以下计算公式: Gopher 数量 = 全世界的开发者数量 ...
- 公钥加密算法那些事 | RSA 与 ECC 系统对比
一.背景 据记载,公元前 400 年,古希腊人发明了置换密码.1881 年世界上的第一个电话保密专利出现.在第二次世界大战期间,德国军方启用「恩尼格玛」密码机,密码学在战争中起着非常重要的作用. 随着 ...
- HDU 5242 利用树链剖分思想进行贪心
题目大意: 在给定带权值节点的树上从1开始不回头走到某个底端点后得到所有经过的点的权值后,这些点权值修改为0,到达底部后重新回到1,继续走,问走k次,最多能得到多少权值之和 这其实就是相当于每一次都走 ...
- HDU 1102 Kruscal算法
题目大意:给定村庄的数量,和一个矩阵表示每个村庄到对应村庄的距离,矩阵主对角线上均为1 在给定一个数目Q,输入Q行之间已经有通道的a,b 计算还要至少修建多少长度的轨道 这道题目用Kruscal方法进 ...
- hdu1856 选出更多的孩子
题目大意: 老师选取2个学生对应的号码,这两人视作朋友,同时朋友的朋友也可以看成自己的朋友. 最后老师选出一个人数最多的朋友圈. 这里学生的人数不大于10^7,所以操作时需要极为注意,操作步数能省则省 ...