修饰模式(Decorator Pattern),又叫装饰者模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。例如,有一个技术论坛,用户通过留言进行沟通,由于刚开始论坛里都是熟人,几乎都不需要对留言的内容作出审核,接收留言的页面可以是这样:class SaveMsg(){private $msg;public function __construct($msg){$this->msg=...
所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存。JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作。除了可以读取文件得到Buffer的实例外,还能够直接构造,例如: var buffer = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;Buffer与字符串类似,除了可以用.length属性得到字节长度外,还可以用[index]方式...
先介绍js添加事件通用方法,具体内容如下<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title></head><body><p id="p1">测试添加事件:firefox使用addEventListener,ie使用attachEvent<br>点击此p标签,绑定了2个弹出事件</p><script>function test1() {alert("test1");}function test2(){alert("test2");}//添加事件通用方法function addEvent(element,e,fn) {//firefox使用addEventListener,来添加事件if(elemen...
JavaScript事件代理事件代理在JS世界中一个非常有用也很有趣的功能。当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委托给父节点来触发处理函数。这主要得益于浏览器的事件冒泡机制,下面我们具体举个例子来解释如何使用这个特性。这个例子主要取自David Walsh的相关文章(How JavaScript Event Delegation Works)。假设有一个 UL 的父节点,包含了很多个 Li 的子节点:<ul id="list"><li id="li-...
新增 const 和 let 命令,用来声明变量。声明方式变量提升作用域初始值重复定义const否块级需要不允许let否块级不需要不允许var是函数级不需要允许变量提升:const 和 let 必须先声明再使用,不支持变量提升console.log(c1, l1, v1); // 报错 // Uncaught ReferenceError: c1 is not definedconst c1 = c1; let l1 = l1; var v1 = v1;作用域:const,let 支持块级作用域,有效避免变量覆盖const c21 = c21; let l21 = l21; var v21...
先通过一个例子说明: function myClass() { var id = 1; var name = "johnson"; //properties this.ID = id; this.Name = name; //method this.showMessage = function() { alert("ID: " + this.ID + ", Name: " + this.Name); } } var obj1 = new myClass(); var obj2 = new myClass();function的定义实际上相当于类的构造函数,最后两句是创建这个类的实例。先分析第一句:var obj1 = new myClass(); 当用new创建...
1:为什么要写这个方法在项目中,一些table都要设置样式,为了样式的美观,表头是一个样式,奇数行一个样式,偶数行一个样式。当鼠标经过的时候颜色变化,鼠标离开时颜色恢复,这就有了这样方法。2:实现过程js文件xs_table_css.js$(document).ready(function () {var xs_table_css = "xs_table"; //获取table的cssvar xs_table_th_css = "xs_table_th"; //table 的th样式var xs_table_even_css = "xs_table_even"; //table的偶数行...
了解一个JS对象的所有属性和方法,获得一个对象的所有属性和方法,核心代码和原理如下:function displayProp(obj){ var names=""; for(var name in obj){ names+=name+": "+obj[name]+", "; } alert(names); }如果知道这个对象的所有属性自然就可以重新new一个,然后对每个属性赋值,就可以做到,但如果不知道呢?如何创建一个内容相同 的对象呢? var obj={ colkey: "col", colsinfo: "NameList" }最简单就是使用for in, ...
Function.prototype.apply()apply方法的作用与call方法类似,也是改变this指向(函数执行时所在的作用域),然后在指定的作用域中,调用该函数。同时也会立即执行该函数。唯一的区别就是,它接收一个数组作为函数执行时的参数。apply方法的第一个参数也是this所要指向的那个对象,如果设为null或undefined或者this,则等同于指定全局对象。第二个参数则是一个数组,该数组的所有成员依次作为参数,在调用时传入原函数。原函数的参数...
Function.prototype.bind()bind方法用于指定函数内部的this指向(执行时所在的作用域),然后返回一个新函数。bind方法并非立即执行一个函数。上面代码中,如果this.a指向keith对象内部的a属性,如果这个方法赋值给另外一个变量,调用时就会出错。上面代码中,如果把count方法赋值给f变量,那么this对象指向不再是keith对象了,而是window对象。而window.a默认为undefined,进行递增运算之后undefined++就等于NaN。为了解决这个问题...
javascript插入样式在前端开发中应用比较广泛,特别是在修改前端表现和页面换肤的时候。一般情况下javascript动态插入样式有两种,一种页面中引入外部样式,在<head>中使用<link>标签引入一个外部样式文件,另一种是在页面中使用<style>标签插入页面样式(这里说的不是style属性)。一、页面中引入外部样式:在<head>中使用<link>标签引入一个外部样式文件,这个比较简单,各个主流浏览器也不存在兼容性问题:function includeLinkS...
js中call和apply都可以实现继承,唯一的一点参数不同,func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])。JS手册中对call的解释:<SPAN style="FONT-SIZE: 18px">call 方法 调用一个对象的一个方法,以另一个对象替换当前对象。 call([thisObj[,arg1[, arg2[, [,.argN]]]]])参数 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。 说...
Function.prototype.call() 函数实例的call方法,可以指定该函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。并且会立即执行该函数。 看个例子来好好理解这段话。上面代码中,a函数中的this关键字,如果指向全局对象,返回结果为456。可以看到,如果call方法没有参数,或者参数为null或undefined或者this,则等同于指向全局对象。如果使用call方法将this关键字指向keith对象,也就是将该函...
获取浏览器窗口的可视区域高度和宽度,滚动条高度有需要的朋友可参考一下。IE中,浏览器显示窗口大小只能以下获取: 代码如下 document.body.offsetWidth document.body.offsetHeight在声明了DOCTYPE的浏览器中,可以用以下来获取浏览器显示窗口大小: 代码如下document.documentElement.clientWidth document.documentElement.clientHeightIE,FF,Safari皆支持该方法,opera虽支持该属性,但是返回的是页面尺寸;同时,除了IE以...
break和continue之间的区别for(var i=0;i<10;i++){if(i>5){break;} } console.log(i); ---6 ?当i=5和10的时候,会执行到break,并退出循环 for(var i=1;i<10;i++){if(i>5){continue;}num++; } console.log(num); ---4var num=0; for(var i=1;i<10;i++){if(i%5==0){continue;}num++; } console.log(num); ---8 ?当i=5或者i=10的时候,会按照i的值,继续执行for循环,并退出循环当执行多重循环的时候break的情况outer: for(var i=0...