在使用 Sinon.js 时,可以通过 called、calledOnce、calledTwice 等属性或 calledWithExactly()、callCount 等方法来验证函数的调用次数,从而设置和检查期望的调用次数...spy.called 函数是否被调用过(至少一次) spy.calledOnce 函数是否被调用过 恰好一次 spy.calledTwice...函数是否被调用过 恰好两次 spy.calledThrice 函数是否被调用过 恰好三次 spy.callCount 函数被调用的 总次数(...log 函数记录信息,我们需要测试该函数的调用次数:进阶:结合调用参数验证除了次数,还可以结合调用参数进行更精确的验证,例如“函数被调用两次,且第二次调用的参数为 error”:it('should...Sinon.js 验证函数调用次数的核心步骤是:用 sinon.spy() 或 sinon.stub() 创建监视函数(spy/stub);执行触发函数调用的操作;通过 calledOnce/callCount
(function(){})表示一个匿名函数,而后面紧跟着的()表示立即调用此函数。而且()也是向函数传递参数的地方。..."); 使用此函数的好处是,不会产生任何全局变量。...不会产生任何全局变量,同时一次引用就够了。...如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。...列如 编辑被点击时,弹出当前编辑框里面的内容。
典型用法是: 用来初始化一个变量,这个变量可能被赋值为一个对象。 用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象。 当函数的参数期望是对象时,被用作参数传入。...典型用法是: 变量被声明了,但没有赋值时,就等于undefined。 调用函数时,应该提供的参数没有提供,该参数等于undefined。 对象没有赋值的属性,该属性的值为undefined。...函数没有返回值时,默认返回undefined。 该如何检测它们? null:表示无值;undefined:表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。...解决方法是,在退出函数之前,将不使用的局部变量全部删除。 闭包会在父函数外部,改变父函数内部变量的值。...+方法名 $.fn.extend(obj);对prototype进行扩展,为jquery类添加成员函数,jquery类的实例可以使用这个成员函数。
jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?"...jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。...complete Function 请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。...如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值: "xml": 返回 XML 文档,可用 jQuery...使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
的应该都知道,这是绑定的DOMContentLoaded 事件 }) 当$变量已经存在时,如引用了jQuery,那么zepto的全局对象将不会指向$,但始终指向window.Zepto ? ...zepto函数最终返回的是一个$符号,$()的调用方式说明了$对象是一个function,所以找到了下图中的代码 ?...但有一点令我不理解的地方是,为何在最后又添加了这么一段重复的逻辑,还希望有知道的同学告诉在下。 ? 最后返回的一个变量经过Zepto的构造函数摇身一变为Zepto对象。...接下来说一下$构造器中用到的一些其他函数; 像通过zepto对象调用的方法,都是可以在其他地方通过$(Zepto).zepto[方法名]调用的, 如 $.zepto.qsa(); 而通过$.fn...该方法接收最多三个参数, 第一个为html值,可以只是一个标签,如(“”)、或一个html片段,如(“hello”); 第二个为一个标识符,用来确定标签类型,该变量主要用于对表格类元素进行一些特殊的处理
,如果附加的对象被传递给这个方法将那么它将接收新的属性,如果它是唯一的参数将扩展jQuery的命名空间; 后面的object1到objectN同样作为对象,包含额外的属性合并到第一个参数。...在jQuery对象上绑定的extend()和jQuery.fn上绑定的extend()方法其实是不同的,前者是类方法,是静态方法,调用方法写作$.extend();后者是实例方法,是成员方法,调用方法写作...target就是最后准备返回的一个对象,定义时被赋予初始值对象,arguments[ 0 ] || {}指如参数数组有值则返回参数数组索引为0的值,否则就是返回一个空对象给target变量。...; target = arguments[ i ] || {}; i++; } 当传入extend方法的第一个参数为布尔类型时,如存在传入第二个参数,则获取当前索引加1的参数并赋值给...isFunction(target)){ target = {}; } 当target为string类型或其他基本类型值或者是函数类型时,将target值直接用空对象赋值。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。 (3)对象没有赋值的属性,该属性的值为undefined。 (4)函数没有返回值时,默认返回undefined。...通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。...闭包的特性: ①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口; ②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后...③当然jQuery还有非常有用的其它特性,如为dom对象绑定数据、动画、等。并且jQuery还非常容易扩展,在它的基础上开发非常灵活,也有众多的插件可用,如jQueryUI、easyUI等。...通过val()便可以获取input的值 把节点元素名加上作为参数调用jQuery方法便可创建新节点,如:jQuery(“”)。 5、如何向页面插入节点?
如何在页面上同时使用 jQuery 和其他框架? ---- jQuery 和其他 JavaScript 框架 正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写。...当然,您仍然可以通过全名替代简写的方式来使用 jQuery: 实例 $.noConflict(); jQuery(document).ready(function(){ jQuery("button...noConflict() 可返回对 jQuery 的引用,您可以把它存入变量,以供稍后使用。...; }); }); 如果你的 jQuery 代码块使用 $ 简写,并且您不愿意改变这个快捷方式,那么您可以把 $ 符号作为变量传递给 ready 方法。...这样就可以在函数内使用 $ 符号了 - 而在函数外,依旧不得不使用 "jQuery": 实例 $.noConflict(); jQuery(document).ready(function($){
命名空间中,我们禁止使用了大量的javaScript函数名和变量名。...但是仍然不可避免某些函数或变量名将于其他jQuery插件冲突,因此我们习惯将一些方法封装到另一个自定义的命名空间。...); 上面定义了一个jQuery函数,形参是$,函数定义完成之后,把jQuery这个实参传递进去.立即调用执行。...我们也许会让选项像一个options对象传递给插件函数。...实例,当它调用成员方法 alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。
jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。...6.不污染顶级变量。jQuery只建立一个名为jQuery的对象,其所有的函数方法都在这个对象之下。其别名$也可以随时交出控制权,绝对不会污染其他的对象。...,用来释放变量控制权的一个重要函数,deep是一个可选的布尔参数,用以决定移交 $ 引用的同时是否移交 jQuery 对象本身。...) // noGlobal函数没被调用就把jQuery对象给window中的 jQuery 和 $ if ( !...不管传递什么,包装后生成的都是jQuery对象,jQuery对象不能调用DOM对象的方法或属性,例如innerHTML、checked等。jQuery对象只能调用自己的方法,例如html、attr等。
函数名和变量名。...但是仍然不可避免某些函数或变量名将于其他jQuery 插件冲突,因此我们习惯将一些方法封装到另一个自定义的命名空间。...); 上面定义了一个jQuery函数,形参是$,函数定义完成之后,把jQuery这个实参传递进去.立即调用执行。...我们也许会让选项像一个options对象传递给插件函数。...实例,当它调用成员方法 alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。
true 但是如何在封闭函数的范围之外定义b?...这是因为,在调用onclick方法(对于任何按钮)时,for循环已经完成,并且变量i已经具有值5....虽然方法只接受一个参数,但调用它时已经传递了两个参数;第一个是函数回调,其他只是一个数字。...当在内部方法中调用fn()时,该函数在全局级别作为参数传递,this.length将有权访问在Object obj中定义的var length = 10(全局声明)而不是length = 5。...当调用变量时,将按照从本地到全局的顺序检查闭包,直到找到实例。由于内部闭包有自己的b变量,这就是输出。
所以我们调用通过$.extend()添加的函数时直接通过$符号调用($.myfunction())而不需要选中DOM元素($('#example').myfunction())。请看下面的例子。...:$('a'),则this=$('a') this.css('color', 'red'); } 在插件名字定义的这个函数内部,this指代的是我们在调用该插件时,用jQuery选择器选中的元素...当给extend方法传递一个以上的参数时,它会将所有参数对象合并到第一个里。同时,如果对象中有同名属性时,合并的时候后面的会覆盖前面的。...另外还有一个好处就是,自调用匿名函数里面的代码会在第一时间执行,页面准备好过后,上面的代码就将插件准备好了,以方便在后面的代码中使用插件。 目前为止似乎接近完美了。...当变量是jQuery类型时,建议以$开头,开始会不习惯,但经常用了之后会感觉很方便,因为可以很方便地将它与普通变量区别开来,一看到以$开头我们就知道它是jQuery类型可以直接在其身上调用jQuery相关的方法
也就是说,让回调函数内this指向这个对象(如果不设定这个参数,那么this就指向调用本次AJAX请求时传递的options参数)。...提供data和type两个参数:data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。...使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。...还有 jqXHR(在jQuery 1.4.x的中,XMLHttpRequest) 对象 。在jQuery 1.5, 成功设置可以接受一个函数数组。每个函数将被依次调用。...this; // 调用本次AJAX请求时传递的options参数 } traditional type:Boolean 如果你想要用传统的方式来序列化数据,那么就设置为true。
意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。...而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型)。...作为参数的转换函数会为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。转换函数可以返回转换后的值、null(删除数组中的项目)或一个包含值的数组,并扩展至原始数组中。...callback:为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。函数可返回任何值。 示例 // 将原数组中每个元素加 4 转换为一个新数组。...,jQuery内部会隐式的变量所有的匹配元素调用设置操作,所以称为隐式迭代。
创造子类实例时无法向父类构造函数传参 拷贝继承 优点:支持多继承 缺点:效率低 内存占用高 实例继承 优点:不限制调用方式 缺点:不支持多继承 组合继承 优点:可传参,可复用...,可以继承原型链上的东西 既是子类实例又是父类实例 缺点:调用了两次父类构造函数 多耗费了一点内存 寄生式组合继承 优点:完美 缺点:实现复杂 20、js作用域链 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的...闭包特性 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部...特性: - 函数内再嵌套函数 - 内部函数可以引用外层的参数和变量 - 参数和变量不会被垃圾回收机制回收 26、什么是js严格模式 严格模式就是在js代码前加 use strict 让 Javascript...的扩展,就是为jquery类添加成员函数 使用: jquery.extend扩展,需要通过jquery类来调用,而jquery.fn.extend扩展,所有jquery实例都可以直接调用 33、作用域
当 Web 客户端转载这个 addon 模块时,该函数将被调用。...$el 当你在部件中重载init()时,必须以父部件作为第一参数传入,并调用传入给this....当在部件内集成 Qweb 时, QWeb.render() 调用在部件调用 start() 之前发生,并用模版的根标签替换了部件的默认根标签。这会导致不同的结果,所以你应该记住它。...this 会隐含传递给所有函数。...如果func是个方法,则object是func函数的引用关联对象。当func被调用时,trigger()的其他参数会传递给它。
不仅如此,在创建jQuery对象时,这些附加方法并不是孤立的,而是在创建jQuery对象时使用其余的方法(已经继承的)调用。jQuery插件可以jQuery库中存在的各种方法的形式单独使用。...最后一行调用插件函数将所有带有a“标签的链接变为黄色。 保护$Alias并添加作用域 编写jQuery插件时总是假定$使用jQuery函数的别名。$在JavaScript库中非常有名。...因此,当需要多个jQuery库时,使用$可能会产生冲突。因此,为了使我们能够将jQuery与其他插件一起使用。必须将代码放在立即调用函数的表达式中。这之后是jQuery的传递,然后命名它的参数$....添加私有方法和变量 在JavaScript中,函数包含多个变量和其他函数,这些变量和函数主要可以在函数内部访问,从而使元素成为私有。立即调用的函数表达式提供了访问私有变量和方法的最佳方法。...当该方法提供“this”运算符时,该方法变为公共方法。这样,它也可以在函数范围之外访问。添加此类公共方法的目的可以是在范围外执行函数,也可以从范围外访问公共变量和方法。
一个匿名函数可以分配给一个变量,它也可以作为参数传递给另一个函数。 问题11:JS中的参数对象是什么&如何获得传递给函数的参数类型 JS 变量arguments表示传递给函数的参数。...forEach() 它为数组中的每个元素调用一个函数。 indexOf() 它返回指定值第一次出现时调用字符串对象中的索引。 length() 它返回字符串的长度。...问题 36:JS的原始/对象类型如何在函数中传递? 两者之间的一个区别是,原始数据类型是通过值传递的,对象是通过引用传递的。 值传递:意味着创建原始文件的副本。...X是一个具有foo属性的对象,由于它是一个自调用函数,所以咱们将从对象X中删除foo属性。这样做之后,当咱们试图引用一个被删除的foo属性时,结果是undefined。...该技术的另一个特性是允许为全局变量提供一个简单的别名,这在jQuery插件中经常使用。 问题50:JS中的转义字符是什么 JS转义字符使咱们能够在不破坏应用程序的情况下编写特殊字符。
发送信息至服务器时内容编码类型。 默认值适合大多数情况。如果你明确地传递了一个 content-type 给 $.ajax() 那么它必定会发送给服务器(即使没有数据要发送)。...也就是说,让回调函数内 this 指向这个对象(如果不设定这个参数,那么 this 就指向调用本次 AJAX 请求时传递的 options 参数)。...提供 data 和 type 两个参数:data 是 Ajax 返回的原始数据,type 是调用 jQuery.ajax 时提供的 dataType 参数。...随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值: "xml": 返回 XML 文档,可用 jQuery 处理。...使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 "text": 返回纯文本字符串