在JavaScript中,函数可以 ◆ 被赋值给一个变量 ◆ 被赋值为对象的属性 ◆ 作为参数被传入别的函数 ◆ 作为函数的结果被返回 赋值给一个变量: //声明一个函数,接受两个参数,返回其和 function add(x, y){ return x + y; } var a = 0; a = add;//将函数赋值给一个变量 var b = a(2, 3);//调用这个新的函数a print(b);这段代码会打印”5”,因为赋值之后,变量a引用函数add,也就是说,a的值是一个函数对象(一个可执行代码...
node.js是基于单线程无阻塞异步式的I/O,异步式的I/O指的是当遇到I/O操作的时候,线程不阻塞而是进行下面的操作,那么I/O操作完成之后,线程时如何知道该操作完成的呢?当操作完成耗时的I/O操作之后,会以事件的形式通知I/O操作的线程完成,线程会在特定的时候来处理这个事件,进行下一步的操作,为了完成异步I/O,线程必须有事件循环的机制,不停的坚持是否有没有完成的事件,依次完成这些事件的处理。而对于阻塞式I/O,线程遇到耗...
在javascript中,并不直接从方法上支持继承,模拟方法可以归纳为四种:构造继承法,原型继承法,实例继承法和拷贝继承法。融会贯通之后,还有混合继续法,这是什么法,就是前面四种挑几种混着来~ 构造继续法例子: //定义一个Collection类型 function Collection(size) { this.size = function(){return size}; //公有方法,可以被继承 } Collection.prototype.isEmpty = function(){ //静态方法,不能被继承 return this.si...
装饰者模式(Decorator Pattern):在不改变原类和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象。装饰者模式的特点:1. 在不改变原对象的原本结构的情况下进行功能添加。2. 装饰对象和原对象具有相同的接口,可以使客户以与原对象相同的方式使用装饰对象。3. 装饰对象中包含原对象的引用,即装饰对象是真正的原对象经过包装后的对象。Javascript装饰者模式详解:装饰者模式中,可以...
module模式是一个比较流行的设计模式,它可以通过大括号封装私有的变量,方法,状态的,通过包装这些内容,一般全局的对象不能直接访问,在这个设计模式里,只返回一个API,其它的内容全部被封装成私有的了。另外,这个模式和自执行的函数表达式比较相似,唯一的不同是module返回的是对象,而自执行函数表达式返回的是function。众所周知, JavaScript不想其它语言一样有访问修饰符,不能为每个字段或者方法声明private,public修饰...
用javascript操纵DropDownList控件,首先得了解select(或者DropDownList)的两个最基本的属性,一个是value属性,一个是text属性,还有一个selectedIndex属性,用来标识当前选中的项(数字),具体可参见上面的示例代码。 下面正式言归正传,主要介绍如下几点: (1) 清空DropDownList控件中的值。 document.getElementById(ddlCities).options.length = 0;(2) 判断DropDownList中是否有value为Param1的ListItem。 function i...
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 一、jQuery中的迭代器$.each([1, 2, 3], function(i, n) {console.log("当前下标为:"+ i + " 当前元素为:"+ n ); });二、实现自己的迭代器var each = function(ary, callback) {for(var i = 0, l = ary.length; i < l; i++) {callback.call(ary[i], i, ary[i]);} }; each([1, 2, 3], function(i, n) {console.log("当前下标为:...
命令模式概念命令模式(Command)的定义是:用来对方法调用进行参数化处理和传送,经过这样处理过的方法调用可以在任何需要的时候执行。也就是说该模式旨在将函数的调用、请求和操作封装成一个单一的对象,然后对这个对象进行一些列的处理。他也可以用来消除调用操作的对象和实现操作的对象之间的耦合。这为各种具体的类的更换带来了极大的灵活性。命令模式的作用和注意事项模式作用:1、将函数的封装、请求、调用结合为一体2、调用...
跨平台事件什么叫跨平台事件?即在不同的浏览器上执行同一事件,所使用的方法不同。什么是EventUtil对象?有什么作用?即将所有与事件相关的函数,融合在一起的一个容器,方便管理事件对象,它没有属性。主要处理DOM事件和IE事件的磨合,使其尽可能的相似。下面我们来看一下DOM和IE之间的对象属性和方法做个对比(这里只指出两者之间不同的属性和方法),主要有以下五大点:DOM属性和方法 IE属性和方法charcode ke...
typeof先来说说typeof吧。首先需要注意的是,typeof方法返回一个字符串,来表示数据的类型。typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a 不...
js需要把时间戳转为为普通格式,一般的情况下可能用不到的下面先来看第一种吧 function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/, ); } alert(getLocalTime(1293072805));结果是 2010年12月23日 10:53 第二种 function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().substr(0,17)} alert(getLocalTime(1293072805));如果你想得到这样格式...
现代浏览器中的<script>标签分成了两种新类型:经典型和非阻塞型。接下来讨论如何运用这两种标签来尽快加载页面。1、阻塞型脚本何去何从?标准版本的<script>标签常常被称作阻塞型标签。这个词必须放在上下文中进行理解:现代浏览器看到阻塞型<script>标签时,会跳过阻塞点继续读取文档及下载其他资源(脚本和样式表)。但直到脚本下载完毕并运行之后,浏览器才会评估阻塞点之后的那些资源。因此,如果网页文档的<head>标签里有5 个...
可编程的脚本加载虽然<script>标签简单得令人心动,但有些情况确实需要更精致的脚本加载方式。我们可能只想给那些满足一定条件的用户加载某个脚本,譬如白金会员或达到一定级别的玩家,也可能只想当用户单击激活时才加载某个特性,譬如聊天小部件。1、直接加载脚本我们可以用类似下面这样的代码来插入<script>标签。var head = document.getElementsByTagName(head)[0]; var script = document.createElement(script); script.src ...
全局标记控制(1)简单计数器控制也许上面介绍的异步方法仍然不能满足实际开发中的业务场景:假设我们有a(),b(),c()三个方法,a和b没有依赖关系,可以异步进行。但是c必须在a和b都完成之后才能触发。为满足这样的逻辑实现,我们加入一个全局计数器来控制代码的执行流程:var flag=2; var aValue,bValue; function a(){aValue=1;flag--;c(); } function b(){setTimeout(function(){bValue=2;flag--;c();},200); } function c(){if...
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。方法定义applyFunction.apply(obj,args)方法能接收两个参数:obj:这个对象将代替Function类里this对象args:这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。callcall方法与apply方法的第一个参数是一样的,只...