前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >call和 apply的区别是什么

call和 apply的区别是什么

作者头像
OECOM
发布2020-07-01 17:52:10
4840
发布2020-07-01 17:52:10
举报
文章被收录于专栏:OECOMOECOM

2015-07-12 15:02:21

一、方法的定义 call方法: 语法:call(thisObj,Object) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法: 语法:apply(thisObj,[argArray]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

相同点:两个方法产生的作用是完全一样的

不同点:方法传递的参数不同

其实说明白一点,其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。

function Person(name,age) { this.name=name; this.age=age; this.money = 500; }

function myFun(money) { alert(this.money); }

var money = 100; myFun(money); //return 100; //window.myFun(money); save to myFun(money); //这个时候this指向的是window对象,其实myFun函数和定义的var money = 100;都作为window对象子对象(即全局对象)

myFun.apply(window,[]); //save to window.myFun.apply(window,[]); //return 100; //同上

myFun.apply(new Person('zhangsan',23),[]); //return 500, 空数组作为参数,仅符合语法要求 //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500

myFun.call(new Person('zhangsan',23),money,300,'mycardId'); //return 500, 后面money,300和mycardId是参数列表作为参数,一一列出 //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档