args:这个是数组,它将作为参数传给Function(args-->arguments)
call:和apply的用法一样,只不过是参数列表不一样.
Function.call(obj,[param1[,param2[,…[,paramN]]]]) obj:这个对象将代替Function类里this对象 params:这个是一个参数列表
轻松实现继承
call和apply可以用来重新定义函数的执行环境,也就是this的指向。通过一个操作DOM的例子来理解。function a(name,age){
this.name = name;
this.age = age;
alert(this.name+'---'+this.age)
}
function b(name,age){
a.apply(this,arguments)
}
var b1 = new b('anikin',23) // alert(anikin--23)
function changeStyle(attr, value){
this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
call中的第一个参数用于指定将要调用此函数的对象,在这里,changeStyle函数将被box对象调用,this指向了box对象,如果不用call的话,程序报错,因为window对象中没有style属性。
apply的用法:
window.changeStyle.apply(box, ['height', '200px']);
function exam(a, b, c, d, e) {
// 先看看函数的自带属性 arguments 什么是样子的
console.log(arguments instanceof Array); // false
// 使用call/apply将arguments转换为数组, 返回结果为数组,arguments自身不会改变
var arg = [].slice.apply(null,arguments);// var arg = [].slice.call(arguments);
console.log(arg instanceof Array); // true
return arg;
}
//exam(2, 8, 9, 10, 3); // array [2, 8, 9, 10, 3]// 也常常使用该方法将DOM中的nodelist转换为数组
// [].slice.call( document.getElementsByTagName('li') )
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
这样domNodes就可以应用Array下的所有方法了。
推荐: 字符串数组