在函数对象中有一个属性叫做arguments,通过这个属性可以获取相应的参数值,这个属性是一个数组,其实就是传递进来的参数
this:
以上可以归纳为:“this所指的就是直至包含this指针的上层对象”
调用形式 | this指向 |
---|---|
普通函数 | 全局对象window |
对象的方法 | 该对象 |
构造函数 | 新构造的对象 |
function say(num) {
/*
* 在函数对象中有一个属性叫做arguments,通过这个属性可以获取相应的参数值,这个属性
* 是一个数组,其实就是传递进来的参数
*/
alert(arguments.length);
for(var i=0;i<arguments.length;i++) {
alert(arguments[i]);
}
alert(num);
}
/**
* 在arguments这个对象中有一个callee的方法,arguments.callee(arg)可以反向的调用
*/
function factorial(num) {
if(num<=1) return 1;
//此时和函数名耦合在一起
// else return num*factorial(num-1);
//以下就实现了函数名的解耦合,在js中通常都是使用这种方式做递归
else return num*arguments.callee(num-1);
}
This的用法:
/**
* 当需要创建一个类的时候,设置类的属性和方法需要通过this关键字来引用
* 但是特别注意:this关键字在调用时会根据不同的调用对象变得不同
*/
var color = "red";
function showColor() {
alert(this.color);
}
/**
* 创建了一个类,有一个color的属性和一个show的方法
*/
function Circle(color) {
this.color = color;
this.showColor = showColor;
}
var c = new Circle("yellow");
//使用c来调用showColor方法,等于调用了showColor()方法
//此时的this是c,所以color就是yellow
c.showColor();//yellow
//此时调用的对象等于是window,showColor的this就是window,所以就会找window中color
showColor();//red
</script>
函数的内部属性arguments和this
函数的属性length和方法call和apply
arguments和length作用一样,但一个是函数内部属性,一个是函数属性