javascript学习笔记07(this,arguments,call,apply)

在函数对象中有一个属性叫做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作用一样,但一个是函数内部属性,一个是函数属性

原文地址:https://www.cnblogs.com/canceler/p/4518753.html