函数内部属性 arguments、this 以及非继承而来的方法 call()和 apply()

来源:互联网 发布:域名注册是免费么? 编辑:程序博客网 时间:2024/06/05 18:27

arguments

arguments 是类数组对象,包含传入函数的所有参数。该对象有一个callee属性,是一个指针,指向拥有这个arguments 对象的函数。

//递归function factorial(num) {    if(num <= 1) {        return 1;    } else {        return num*factorial(num-1);    }}

上面的写法,是可以的,但是如果改函数名就需要同时改两个地方

//将函数名换成arguments.callee(指向函数的指针)function factorial(num) {    if(num <= 1) {        return 1;    } else {        return num*arguments.callee(num-1);    }}


this

this指向函数执行时所处的作用域。在全局作用域中调用函数时,指向window。 (这种表示不太准确,但我觉得会好理解一点。)

var color ='red';var obj = {color:'blue'};function sayColor() {    return this.color;}sayColor();//redobj.sayColor = sayColor;obj.sayColor(); //blue

运行结果


call()和apply()

call() 和apply()在特定作用域 调用函数,说白了也就是设置this对象的值,扩充作用域。都包含两个参数,第一个参数是作用域,第二个是传入的参数。
两者接收第二个参数,也就是【传入参数】的方式不同,call() 要一个一个传入,apply接收数组。

function sum(num1, num2) {    return num1+num2;}function callSum(num1,num2) {    return sum.call(this, num1, num2);}function applySum(num1, num2) {    return sum.apply(this, arguments);    //return sum.apply(this, [num1, num2]);}callSum(10,10);//20applySum(10, 10);//20

运行结果

//可以与上面this里的例子做个比较var color ='red';var obj = {color:'blue'};function sayColor() {    return this.color;}sayColor();//redsayColor.call(this); //redsayColor.call(window); //redsayColor.call(obj); //blue
阅读全文
0 0
原创粉丝点击