为了账号安全,请及时绑定邮箱和手机立即绑定

关于call的使用

function add(c,d){

 			return this.a +this.b+c +d;
 		}

 		var o ={a:1,b:3};

 		add.call(o,1,10);
 		

这里在定义function add的时候,没有定义ab变量,为什么不会报错呢?老师说这个call使用之后,1 和10就会传给add里面的c 和d,然后add里面的a和b就是o里面的a和b???是不是因为都是a和b所以就是一样的???如果o里面的不是a和b呢?

正在回答

4 回答

关于add.call(o,1,10);你可以理解为,对象o中有了add这个方法,即:

var o{

a:1,

b:3,

// 在对象o中新增加了 

function add(c,d){

 

           return this.a +this.b+c +d;

       }

 

 return this.a +this.b+c +d

}

此时的a,b就是1,3;而1,10就是c,d

1 回复 有任何疑惑可以回复我~
#1

深夏之叶 提问者

恩恩。所以如果o刚开始是这么定义的话。你看下面的代码。 var o{ e:1, f:3, // 在对象o中新增加了 function add(c,d){ return this.a +this.b+c +d; } return this.a +this.b+c +d } 就是o里面的变量改成e 和f的话,是不是就不能运行了。因为add里面的变量是a和b
2016-10-19 回复 有任何疑惑可以回复我~
#2

weibo_陈杰夫长颈鹿_03237116 回复 深夏之叶 提问者

是的!
2016-10-19 回复 有任何疑惑可以回复我~
#3

林金章

这样写不对吧
2017-03-09 回复 有任何疑惑可以回复我~

call和apply可以按你说的这样,那bind方法呢?

0 回复 有任何疑惑可以回复我~
#1

慕粉1440489053

bind是绑定环境啊 传入需要作为this值的对象
2017-04-21 回复 有任何疑惑可以回复我~

上边这位说的很到位,其实就是相当于个o对象添加了一个方法而已,只不过这个方法没有定义在对象的内部,相当于吧一个函数的方法用call方法调用给了这个对象。

0 回复 有任何疑惑可以回复我~

定义函数可以传入参数也可以不传入参数,因为函数对象默认会有arguments内置方法来保存函数调用时实际传入的参数。这个add函数定义时没有传入啊,a,b参数但是上边的函数是为下方o对象调用call方法是调用函数的this.a和this.b来使用,相当于对象调用函数对象那个的方法来使用。call方法第一个传入要绑定this的对象,后边传入单个参数。如果还不理解就上网查call和apply和bind的具体用法。

1 回复 有任何疑惑可以回复我~
#1

深夏之叶 提问者

很到位
2016-10-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281098    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程

关于call的使用

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信