在Javascript中,每个函数都有一个原型属性prototype指向自身的原型,而由这个函数创建的对象也有一个__proto__属性指向这个原型,而函数的原型是一个对象,所以这个对象也会有一个__proto__指向自己的原型,这样逐层深入直到Object对象的原型,这样就形成了原型链。每个函数都是Function函数创建的对象,所以每个函数也有一个__proto__属性指向Function函数的原型。这里需要指出的是,真正形成原型链的是每个对象的__proto__属性,...
函数字面量和Function()构造函数的区别 虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。 var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象...
获取HTML静态页面参数传递值可以利用split函数来按参数切成数组、利用正则表达式来获取,具体实现如下例一 利用正则表达式来获取 var LocString = String(window.document.location.href); function getQueryStr(str) { var rs = new RegExp("(^|)" + str + "=([^&]*)(&|$)", "gi").exec(LocString), tmp; if (tmp = rs) { return tmp[2]; } // parameter cannot be found return ""; }调用方法 document.getElementById(...
我们知道,如果两个对象即使内容,JavaScript也会判断它们不相等。但是有时候,我们仅仅需要判断两个对象的内容是否相等。那么我们应该如何做到且考虑周全呢?比如说0和-0,null和undefined,是不相等的,NaN和NaN默认是不相等的。我写了一个isEqual方法,考虑到了诸多方面,代码如下:<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title></head><body></body> <script type="text/javascript"> //isEqual:判断两...
什么是按值传递呢?也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。按值传递举个简单的例子: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()的参...
slice()定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。1、传递参数为正值情况:var str ="helloWorld"; // 一个参数,则将字符串长度作为结束位置 alert(str.slice(3)); // "loWorld" // 两个参数,7位置上的字符为"r",但不包括结束位置的字符 alert(str.slice(3,7)); // "loWo"2、传递参...
prototype 对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制,如果用原型方式重定义前面例子中的类,它们将变为下列形式:function ClassA() { } ClassA.prototype.color = "blue"; ClassA.prototype.sayColor = function () {alert(this.color); }; function ClassB() { } ClassB.prototype = new ClassA();原型方式的神奇之处在于最后一行代码。这里,把 ClassB 的 prototype 属性设置成 Clas...
虽然使用 Object构造函数 或者使用 对象字面量 可以很方便的用来创建一个对象,但这种方式有一个明显的缺点:使用一个接口创建多个对象会产生很多冗余的代码。因此为了解决这个问题,人们开始使用以下几种方式来常见对象。工厂模式该模式抽象了创建对象的具体过程,用函数来以特定接口创建对象的细节 function cPerson(name,sex,age){var o = new Object();o.name = name;o.sex = sex;o.age = age;o.show = function(){console.log...
知识点: (1)JS面向对象基础:ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数”。 (2)JS创建对象的方法: (a)工厂模式:用函数来封装以特定接口创建对象的细节。 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson(“Nicholas”,...
删除数组中指定的元素/*** 参考实例 foreach = function (obj, insp){if(obj== null && obj.constructor != Array){return []; } //obj是要处理的数组,obj==null 表示对象尚未存在;obj.constructor != Array 表示对象obj的属性的构造函数不是数组; //constructor属性始终指向创建当前对象的构造函数。两个条件均满足,则返回空数组[]; //下面对constructor属性作进一步了解。 var obj= [1, 2, 3, 4]; // 等价于 var obj= new A...
1:js操作json对象for(var item in json){ alert(item); //结果是 aa,bb, 类型是 string alert(typeof(item)); alert(eval("json."+item)); //结果是true,true类型是boolean eval(("json."+item+"=false;")); //改变json对象的值 }2:json对象转化为String对象的方法 /** * json对象转字符串形式 */ function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s == object && s != null) return json2...
我们看看各大类库的处理: //jQuery的makeArray var makeArray = function( array ) { var ret = []; if( array != null ){ var i = array.length; // The window, strings (and functions) also have length if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) ret[0] = array; else while( i ) ret[--i] = array[i]; } return ret; }jQuery对象是用来储存与处理dom元...