javascript学习难点剖析1

来源:互联网 发布:mac涂层脱落可以换吗 编辑:程序博客网 时间:2024/06/03 05:31

1.函数内部两个对象:arguements和this;

其次,还有另一个函数对象的属性对象的属性:caller

(1)arguements

表示类数组对象,包含传入函数中的所有参数。

用途:保存函数参数。

属性:callee,表示的是一个指针类型,即指向当前拥有arguements对象的函数。


以一个阶乘函数的案例如下:

function factorial(num){

if(num<=1){

return 1;

}

else{

returnnum*factorial(num-1);

//return num*arguements.callee(num-1);

}

}

如上所示,带标记的函数,即指的是当前函数,一个指针类型,可以用arguements.callee表示。

(2)this

引用的是函数执行的环境对象,

即在调用函数时,this对象引用的就是window。


以一段代码案例为例:

window..color="red";

var o={color:"blue"};

function saycolor(){

alert(this.color);

}

saycolor();            //表示在全局变量中; 

//执行后即为window下的对象,red。

o.saycolor=saycolor;

o.saycolor();


           注:由于saycolor在全局变量中定义,因此引用了this对象,其在代码段执行的过程中引用了不同的对象。

首先,调用saycolor()函数时,

this引用的是一个window对象,this.color=window.color,返回“red”;

其次,这个函数赋值给o时,此时this.color=o.color,即返回了“blue”;

(3)caller

该属性主要是保存调用当前对象函数的函数的引用,

若在全局作用域中调用,即返回null;


以一段代码案例为例:

function outer(){

inner();

}

function inner(){

alert(inner.caller);

}

outer();

在上述函数中,会显示出outer()函数的源代码,

首先outer()中调用了inner(),所以inner.caller就会指向outer(),

由于inner表示arguements.callee,所以上述inner可由其代替,即可实现松散的耦合。


2.函数属性和方法

属性:length、prototype;

方法:call()、apply()、bind()

(1)call()方法时,传递给函数的参数必须一一列举出来。

以一个案例来说明,

function sum(num1,num2){

return num1+num2;

}

function callsum(){

return sum.call(this,num1,num2);

}

(2)apply()方法

其可接受两个参数,一个是作用域,一个是参数数组,即也可以是Array实例,或arguements对象。

function sum(num1,num2){

return num1+num2;

}

function callsum2(num1,num2){

return sum.apply(this,[num1,num2]);

}

(3)bind()方法

创建一个函数实例,其对应this值会被绑定当前bind()函数中,

window.color="red";

var o={color:"blue"};

function saycolor(){

alert(this.color);

}

var objectsaycolor=saycolor.bind(o);

objectsaycolor();

由于在该函数中出现bind()函数,即存在绑定,其中的函数参数o传进来,即显示“blue”;

3.函数继承的方法3种,都是返回函数的代码

a、oLocaleString()和toString();

b、valudeOf()

4.操作符typeof、instanceof

(1)typeof

对基本类型返回“boolean”

对引用类型返回“true”

(2)instanceof

对测试基本类型boolean对象时,返回“true”

对测试引用对象布尔值时,返回“false”

5.boolean、number、string

重写的方法包括:toString()、toLocaleString()、valueOf()

在toString(n)方法中,可传入返回n进制数值的字符串形式,

即如以下代码所示

var num=10;

alert(num.toString());   //"10";

alert(num,toString(2));   //"1010"

a.string()方法中,有3种创建新字符串方法:substr(1,n)、slice()、substring()

substr(1,n):第二个参数n表示返回的字符的个数;

slice()、substring():表示子字符串最后一个字符后边的位置。

b.位置方法:indexOf()、lastindexOf()

前者表示前往后,后者表示后往前,返回的是一个数值,参数为指定的一个字符类型。

c.删除空格方法:trim()

d.转换大小写

大写: toLocaleUpperCase()

   toUpperCade()

小写:即将Upper改为Lower

e.模式匹配match()方法



1 0