首页 > 代码库 > javascript 对象初探 (六)--- call()和apply()初探
javascript 对象初探 (六)--- call()和apply()初探
在javascript中,每个函数都具有call()和apply()两个方法,您可以用她们来触发函数,并指定相关的调用参数。
此外,这两个方法还有另一个功能,就是她可以让一个对象去‘借用‘另一个对象的方法,并为己用。这也是一种简单的代码重用。
function her = { name : ‘Anna‘, say:function(a){ return ‘Hello‘+a+‘I am‘+this.name+‘!‘ }}
这样一来我们就能调用her对象的say方法。
her.say(Jon); // ‘Hello Jon I am Anna!‘
下面我们再创建一个对象,他只有一个name属性:
var his = { name : ‘Jock‘}
显然her的say()方法也同样适用his()方法。因此我们希望say()方法当做his对象自身的方法来调用,这是就用到了call()或apply()方法:
her.say.call(his,‘Meng‘); // ‘Hello Meng I am Jock!‘
成功了,但您明白为啥吗?因为这样一来say()中的this就被自动设置成了his的对象的引用,因而this.name为Jock而不是Anna了!!!
另外,如果我们没有将对象传递给call()或apply()的首参数,或传递的是null,她的调用对象将会默认为全局对象(即this指向window)。---实际上call()的第一个参数修改了对象this的指向。
apply()的原理其实和call()是相同的,只不过区别在于参数的传递形式,下面来对比一下:
her.say.call(his, a,b,c);her.say.apply(his, [a,b,c]);
javascript 对象初探 (六)--- call()和apply()初探
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。