首页 > 试题广场 >

以下程序执行后返回的结果是:( ) var p1 ...

[单选题]
以下程序执行后返回的结果是:(   )
var p1 = {
  name:'小明',
  age:'12',
  action:function(where,doing){
   console.log(this.age + '岁的'+this.name + '在' + where + doing);
  }  
}
var p2 = {
  name:'小红',
  age:'15'
}
console.log(p1.action.call(p2,'操场上','运动'))

  • 12岁的小明在undefined undefined
  • 12岁的小明在操场上运动
  • 15岁的小红在undefined undefined
  • 15岁的小红在操场上运动
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了: call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' ); apply的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ]); bind除了返回是函数以外,它 的参数和call 一样。 当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!     
发表于 2019-08-07 20:28:45 回复(1)
call apply bind 问题 先普及基础知识 这三者均用于改变this 指向问题 call apply 是立即调用 但参数形式不同
let obj = {
            name: 'zs',
            age: 19,

        };
        function foo(a, b) {
            console.log(this);
            console.log(a, b);
        };
        foo.call(obj, 5, 6);//5 6
        foo.apply(obj, [7, 8]);//7 8
        foo.bind(obj)(2, 3); //不会立即调用 赋值的时候调用//2 3
三者第一个值均为对象 apply 后两个数为[ ]数组形式 
本题中关键是this 指向问题  
call(p2,'操场上','运动')
将p1 action中的This指向改为p2 所以this.age变为p2.age  this .name变为p2.name
加上后面的在操场 运动就是
15岁的小红在操场上运动
我第一次写这么多可能有不足希望指正 

发表于 2019-11-14 20:42:53 回复(2)

https://wy310.cn/2019/12/18/what-is-call-and-apply/

讲的很清晰

发表于 2019-12-31 17:56:51 回复(6)
使用call,就意味着要替换上下文,那么此时可以理解为将action方法执行的上下文改为p2,所以this会指向p2
发表于 2019-08-05 17:54:32 回复(0)
发表于 2021-01-04 21:34:41 回复(0)
简单来说,call的第一个参数的作用就是把第一个参数的对象p2传递给p1中的action。
这样在执行的时候,action中的this会指向p2。
发表于 2020-11-29 16:59:02 回复(0)
call、 bind、 apply这三个函数的第一个参数都是 this的指向对象,第二个参数差别就来了: call的参数是直接放进去的,第二第三第 n个参数全都用逗号分隔,直接放到后面 obj. myFun. call( db,'成都',...,'string'); apply的所有参数都必须放在一个数组里面传进去 obj. myFun. apply( db,['成都',...,'string']); bind除了返回是函数以外,它的参数和 call一样。当然,三者的参数不限定是 string类型,允许是各种类型,包括函数、 object等等!
发表于 2019-09-04 17:21:20 回复(0)
题目中调用call,第一个参数传p2,则this指向的是p2
发表于 2021-06-11 11:05:33 回复(0)
https://www.bilibili.com/video/BV1p4411u7TT?p=79
这个视频也讲的很清晰,看完就懂了
发表于 2020-10-15 16:07:18 回复(2)
<p>不懂</p><p><br></p>
发表于 2020-07-25 23:03:46 回复(0)
15岁的小红在操场上undefined
发表于 2019-10-16 08:06:12 回复(0)
因为p1绑定了p2的作用域,所以this指向的是p2,故this.age和this.name指的是p2的age和name。所以选D
发表于 2021-12-01 16:24:39 回复(0)
call后面的参数,表示的是,call前面函数的参数
发表于 2021-04-26 15:10:49 回复(0)
call的第一个参数的作用就是把第一个参数的对象p2传递给p1中的action。 这样在执行的时候,action中的this会指向p2。
发表于 2020-12-09 23:32:09 回复(0)
<p>也就是说,用p2的数据调用p1的方法,因为p2没有action方法</p>
发表于 2020-11-12 16:26:33 回复(0)
JS中的call,bind,apply三个函数的第一个参数都是绑定this的指向。call与apply的不同在于其他参数,apply需要传入参数数组,call则正常传入参数。本题将this的指向绑定到p2,所以this指向p2.所以答案为D。
发表于 2020-10-09 21:15:36 回复(0)
call、apply改变this的指向,此处的this指向的就是p2
发表于 2020-09-03 16:30:51 回复(0)
var p1 = {
  name:'小明',
  age:'12',
  action:function(where,doing){
   console.log(this.age + '岁的'+this.name + '在' + where + doing);
  }  
}
var p2 = {
  name:'小红',
  age:'15'
}
console.log(p1.action.call(p2,'操场上','运动'))
在这一题中通过在调用p1的方式时通过call方法修改了this的指向,所以在调用这个方法时this指向的是p2的属性值
发表于 2020-07-29 09:22:24 回复(0)
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了: call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' ); apply的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ]); bind除了返回是函数以外,它 的参数和call 一样。 当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!
发表于 2020-02-25 22:48:50 回复(0)
为什么这段代码最后会输出undefined,如下图:

发表于 2019-09-27 23:54:32 回复(2)