JavaScript 函数调用每种方式的不同方式在于 this 的初始化。通过值传递参数在函数中调用的参数是函数的参数。如果函数修改参数的值,将不会修改参数的初始值(在函数外定义)。函数参数的改变不会影响函数外部的变量(局部变量)。通过对象传递参数在JavaScript中,可以引用对象的值。因此我们在函数内部修改对象的属性就会修改其初始的值。修改对象属性可作用于函数外部(全局变量)。this 关键字一般而言,在Javascript中,this...
什么是按值传递呢?也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。按值传递举个简单的例子:var value = 1; function foo(v) {v = 2;console.log(v); //2 } foo(value); console.log(value) // 1很好理解,当传递 value 到函数 foo 中,相当于拷贝了一份 value,假设拷贝的这份叫 _value,函数中修改的都是 _value 的值,而不会影响原来的 value 值。引用传递拷贝虽然很好理解,但是当值...
window.settimeout()方法要调用带参数的函数有两种方法: function init(){ var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); //alert(url); window.setTimeout(function(){ searchJDWater(url);},100); }function init(){ var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); //alert(url); win...
原型式继承 原型式继承的的实现方法与普通继承的实现方法不同,原型式继承并没有使用严格意义上的构造函数,而是借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。具体代码如下:function object(o) {function F() {}F.prototype = o;return new F(); }代码示例:/* 原型式继承 */ function object(o) {function F() {}F.prototype = o;return new F(); }var person = {name : wuyuchang,friends : [wyc, ...
eval()的使用基于以下两个原因,除非确实需要,不然应尽量避免在代码中使用eval()语句:1.从逻辑上来说,字符串应该用于储存程序运行过程中的内容、信息,而不应该用于储存具体的计算逻辑。2.由于eval()参数为字符串,而对于一段字符串无法词法进行,因此对于eval()调用语句,JavaScript解释器无法进行优化。eval()的返回值eval()的返回值遵循以下规则:1.如果eval()的参数不是字符串,那么eval()将直接返回参数。2.如果eval()的参...
shift :删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefinedvar a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1unshift :将参数添加到原数组开头,并返回数组的长度var a = [1,2,3,4,5]; var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7注:在IE6.0下测试返回值总为 undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。本文来自www...
POP 删除最后一项删除最后一项,并返回删除元素的值;如果数组为空则返回undefinevar a = [1,2,3,4,5]; a.pop();//a:[1, 2, 3, 4] a.pop();//a:[1, 2, 3] a.pop();//a:[1, 2]shift 删除第一项删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefinevar a = [1,2,3,4,5]; a.shift(); //a:[2,3,4,5] a.shift(); //a:[3, 4, 5]push 增加到最后并返回新数组长度;var a = [1,2,3,4,5]; a.push(6);//[1, 2, 3, 4, 5, ...
join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。例如: <script type="text/javascript">var arr = [item 1, item 2, item 3];var list = <ul><li> + arr.join(</li><li>) + </li></ul>;</script>list结果:<ul><li>item 1</li><li>item 2</li><li>item 3</li></ul>这是迄今为止最快的方法!使用原生代码(如 join()),不管系统内部做了什么,通常比非原生快很多。——James Padolsey, james.padolsey.com...
原型链JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下:// 为父类型创建构造函数 function SuperType() {this.name = [wuyuchang, Jack, Tim];this.property = true; }// 为父类型添加方法 SuperType.prototype.getSuerperValue = function() {return this.property; }// 为子类型创建构造函数 function SubType() {this.test = [h1...
slice() 方法可从已有的数组中返回选定的元素。语法arrayObject.slice(start,end)参数描述start必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。end可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开...
每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,JavaScript中的每个函数都是一个对象。看一下 这篇文章 ,复习一下(refresher)JavaScript特性。你可能还想知道JavaScript中函数和方法的区别。我认为“函数”和“方法”的描述,仅仅是JavaScript的习惯约定而已。函数立足于它们自己(例如:alert()),而方法是...
数组常用函数concat在现有数组后面追加数组,并返回新数组,不影响现有数组:var a = [123]; var b = "sunnycat"; var c = ["www",21,"ido"]; var d = {x:3.14, y:"SK"}; var e = [1,2,3,4,[5,6,[7,8]]]; alert(a.concat(b)); // -> 123,sunnycat alert(a); // -> 123 alert(b.concat(c, d)); // -> sunnycatwww,21,ido[object Object] alert(c.concat(b)); // -> www,21,ido,sunnycat alert(e.concat(11,...
getAbsoluteUrl从一个字符串变量得到一个绝对 URL,并不是你想象中这么简单。对于某些 URL 构造器,如果你不提供必要的参数就会出问题(而有时候你真的不知道提供什么参数)。下面有一个优雅的技巧,只需要你传递一个字符串就能得到相应的绝对 URL。var getAbsoluteUrl = (function() {var a;return function(url) {if(!a) a = document.createElement(a);a.href = url;return a.href;}; })();// 用法 getAbsoluteUrl(/something);...
递归调用(arguments.callee) 递归调用就是自己调用自己。调用分为:直接调用和间接调用下面展示使用递归调用来计算指定值的斐波那契数列。// 求i的阶乘 function factorial(i){if(i < 2){return 1;}return i*factorial(i-1); // 递归调用 } alert(factorial(5)); // 求5的阶乘 // 以上方式存在一个问题?如下: var factorial = function(i){if(i < 2){return 1;}return i*factorial(i-1); // factorial还能被调用吗?不能 } ...
模块是一个提供接口而隐藏状态和实现的函数或对象。 一般形式:一个定义了私有变量和函数的函数;利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把他们保存到一个可以被访问到的地方。Function.prototype.method = function(name,func){this.prototype[name] = func;return this; }; String.method("deentityify",function(){var entity = {quot : ",lt : <,gt : >};return function(){return ...