call()和apply()以及arguments用法

call()和apply()方法
/**
 * 以下三种形式都可以调用fun函数
 * 区别:
 * 在调用call()和apply()时,可以将一个对象指定为第一个参数
 * 在javascript严格模式中,在调用函数时,第一个值均成为this值,
 * 在JavaScript非严格模式中,如果第一个参数值是null或undefined,他会使用全局变量代替
 * 因此,这两个方法可以用来修改this值
 */
function fun() {
    console.log(this.name);
}
var obj1 = {name:"顺悟空"};
var obj2 = {name:"猪八戒"};

fun();// <empty string> this为window
fun.call(obj1);//猪八戒
fun.apply(obj2);//孙悟空
/**
 * call()方法可以将实参在对象之后传递
 * 而apply()方法需要将实参统一封装在数组中传递
 *
 */
function con(a,b) {
    console.log("a="+a);
    console.log("b="+b);

}
con();// a=undefined b=undefined
con.call(obj1,3,5);//a=3,b=5
con.apply(obj1,[1,3]);//a=1,b=3
// "use strict";//使用严格模式

/**
 * 以下三种形式都可以调用fun函数
 * 区别:
 * 在调用call()和apply()时,可以将一个对象指定为第一个参数
 * 在javascript严格模式中,在调用函数时,第一个值均成为this值,
 * 在JavaScript非严格模式中,如果第一个参数值是null或undefined,他会使用全局变量代替
 * 因此,这两个方法可以用来修改this值
 */
function fun() {
    console.log(this.name);
}

var obj1 = {
    name: "顺悟空",
    sayname: function () {
        alert(this.name)
    }
};

var obj2 = {name: "猪八戒"};

obj1.sayname();//顺悟空
obj1.sayname.apply(obj2);//猪八戒
arguments用法
<script type="text/javascript">
    /**
     * 在调用函数时,浏览器每次都会传递两个隐含参数
     * 1.函数上下文的this
     * 2.封装实参的对象arguments
     *      -arguments是一个类(类似但不是)数组对象,也可以通过索引操作数据,也可以获取长度
     *      在调用函数时,我们所传递的实参都会封装在arguments中
     *       arguments.length可以用来获取实参长度
     *       即使不定义形参 也可以通过arguments来使用实参,只不过比较麻烦
     *        它还有一个属性叫callee
     *        这个属性对应一个函数对象,就是当前执行的函数对象
     */
    function fun() {
        console.log(arguments instanceof Array);//判断是否是数组 false
        console.log(Array.isArray(arguments));//判断是否是数组false
        console.log(arguments.length);//2,实参数的数量
        console.log(arguments[1]);//true
        console.log(arguments.callee==fun);//ture

    }
    fun("hellow",true);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值