js call方法使用

今天看到公司一道js面试题,代码如下,问使用getName方法打印出1,2,3

    var name = "1";
    var obj = {
        name:2,
        prop: {
            name:3,
            getName: function() {
                return this.name;
            }
        }
    }
    console.info(obj.prop.getName()); //3
    console.info(obj.prop.getName.call(obj)); //2
    console.info(obj.prop.getName.call(this)); //1

这题考察两个点,一是 this代表当前对象

二是如何改变当前对象 这里使用call方法

如果想得到3 直接 obj.prop.getName() 即可,这事方法的当前对象是prop

如果想得到2 我们可以 obj.prop.getName.call(obj) 就是把obj对象传到方法内,这时候的this对象是obj, this.name 等同于obj.name

1也是同理 obj.prop.getName.call(this) 这里的this是当前页面 传window也是一样的

当然也可以使用apply, apply 和 call 的不同在于call,就是call方法接受的是若干个参数的列表,而apply方法接受的是一个包含多个参数的数组。 apply(thisargs,[])用数组给方法传递参数, call(this, param1,param2);  下面一个小例子

    function callTest(name, price) {
        console.info(name + "-" + price);
    }
    callTest.call(this, 'superbing', 100);

    callTest.apply(this, ['superbing', 200]);

 

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值