JavaScript---call()和apply()

一、call() 函数

语法:

Function.call(obj,param1,param2,…paramN)
	>参	obj:	这个对象将代替Function类里this对象
	>参	params:	是一个参数列表

示例:

function ClassA(sColor) {
	this.color = sColor;
	this.sayColor = function() {
		console.log(this.color);
	};
}
function ClassB(sColor, sName) {
	ClassA.call(this, sColor);
	this.name = sName;
	this.sayName = function() {
		console.log(this.name);
	};
}

var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();	//blue
objB.sayColor();	//red
objB.sayName();		//john
console.log(objB.hasOwnProperty("color"));//true

注释:call()它的第一个参数用来传递当前环境下的函数的this的对象,保持this的一致性,后面的参数列表将传递给调用call()的函数。

二 、apply() 函数

语法:

Function.apply(obj,args)
	>参	obj:	这个对象将代替Function类里this对象
	>参	args:	数组参数,必须是数组

示例:

function ClassA(sColor) {
this.color = sColor;
	this.sayColor = function() {
		console.log(this.color);
	};
}

function ClassB(s,sColor, sName) {
	ClassA.apply(this, arguments);
	this.name = sName;
	this.sayName = function() {
		console.log(this.name);
	};
}

var objA = new ClassA("blue");
var objB = new ClassB(10,"red","John");
objA.sayColor();		//blue
objB.sayColor();		//10
objB.sayName();			//John

注释:与call()类似,第一个参数用来传递当前环境下的函数的this的对象,保持this的一致性。第二个参数只能是一个数组。可以把ClassB的整个arguments
对象作为第二个参数传递给 apply()方法,但是要注意,子类在接收父类的arguments对象作为参数时,只会按照顺序一一读取对应,并不会识别参数含义。
注释:apply()有一个妙用,第二参数可以将数组默认的转换为一个参数列表【[param1,param2,param3]转化为:param1,param2,param3】

示例:JavaScript Math 对象的 Math.max() 方法
支持多个参数,将返回最大的那个数字,但是要注意,此处的max()方法参数不能使用数组

console.log(Math.max(1,23,5,6,88));		// 88
var arr = new Array(1,23,5,6,88);
console.log(Math.max(arr));				//NaN
console.log(Math.max.apply(null,arr));	//88

注释:这里的 Math.max()不支持参数使用数组,正常情况下我们就需要来拆解数组,再一个个的传递给max函数。这时,我们可以利用apply()的可以转化数组为参数列表特性。调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,并且我们只需要得到结果即可。
注释:所有类似Math.max()的方法都可以使用上述方式便捷操作,例:Math.min(),Array.push()等。


博文不长,旨在精炼

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值