Javascript高级程序设计——函数内部属性与函数属性

函数内部属性

  函数内部有两个特殊的属性arguments和this。其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针,指向拥有arguments的函数。而this据以引用的是函数执行环境对象。

function fib(n){
    if(n = 1){
        return 1;
    }else{
        return n * arguments.callee(n - 1);   
    }
}

 //这里利用函数内arguments的callees属性降低了函数的耦合、

 

  ECMAScript 5 也规范了另一个函数属性:caller。保存着调用当前的函数的函数的引用,如果是在全局作用域则为null。

function outer(){
    inner();
}

function inner(){
    alert(inner.caller);
}

outer();

//alert函数会制动执行toString函数,这里弹出outer函数代码

   每个函数都有两个非继承而来的方法:apply() 和 call():用途是在特定的作用域中调用函数,等于设置函数体内的this对象的值。

apply()方法接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组。第二个参数可以是Array()的实例,也可以是arguments对象。

function sum(num1, num2){
    return num1 + num2;
}

function callSum(num1, num2){
    return sum.apply(this, arguments)
}
callSum(1, 2);     //全局作用域中调用所以this为window。


call()方法接受两个参数,与apply区别是第二个参数,必须逐个举列出来。
function callSum(num1, num2){
    return sum.call(this, num1, num2);
}

callSum(10, 10);


ECMAScript定义了bind方法,简历函数实例,其this值会被绑定到传给bind()函数的值,例如:

var obj = {
this.color: "red"};

window.color = "green";

function sayColor(){
alert(this.color);
};

var newFunc = sayColor.bind(obj);
newFunc(); //red

posted @ 2015-09-01 22:20  xnuwu  阅读(253)  评论(0编辑  收藏  举报