把函数放到对象里,就成了对象的方法。如果一个函数没有放到任何对象里,那它就是全局对象的函数了。
对象的方法是可以重用的。这就好比你们家新安了一部电话,你家可以打,只要你愿意,你的邻居也可以打。
JavaScript有两个预定义方法:call()
和apply()
。
利用他们两个,可以把对象里的方法应用到其他对象里面。比如:
<p id="demo"></p>
<script>
var telephone = {
conversation: function() {
return '电话号码:'+this.num;
}
}
var telephone1 = {
num:131
}
var x = telephone.conversation.call(telephone1);
document.getElementById("demo").innerHTML = x; //电话号码:131
</script>
如果没有参数的话,apply()
和call()
没有区别,上面的例子,可以直接把call改成apply,结果是一样的。它们两个的区别在于,对于参数的处理。看下面这个例子:
<p id="demo"></p>
<script>
var telephone = {
conversation: function(name,name1) {
return '电话号码:'+this.num + ', 打给:' + name + '和' + name1;
}
}
var telephone1 = {
num:131
}
var x = telephone.conversation.call(telephone1,'刘小妞','刘小小');
document.getElementById("demo").innerHTML = x; //电话号码:131, 打给:刘小妞和刘小小
</script>
如果用apply的话,参数需要写成一个数组,如下:
var x = telephone.conversation.apply(telephone1,['刘小妞','刘小小']);
它的输出结果和上面的call是一样的。
前面我们介绍过Math.max()方法
,它是返回数字列表里最大数字的。比如:
Math.max(1,2,3);//返回3
JavaScript数组里没有max()方法
,我们可以通过apply,使用Math对象里的max()方法
。用法如下:
Math.max.apply(null,[1,2,3]);//返回3
上面的例子,第一个参数其实没什么用,max方法
主要返回参数中最大值,至于是哪个对象,它没用到。换成其他的任何值都可以,比如:
Math.max.apply('',[1,2,3]);//返回3
Math.max.apply(0,[1,2,3]);//返回3
换成call
Math.max.call('',1,2,3);//返回3
返回的都是一样的。
注意:在 JavaScript 严格模式下,如果 apply() 方法
的第一个参数不是对象,则它将成为被调用函数的所有者(对象)。在“非严格”模式下,它成为全局对象。
对象别的重用你看明白了吗?如果想系统看更多关于前端文章,可以微信搜索公众号:“刘小妞的栖息地”或者扫描下面的二维码查看。感谢大家的支持。