js/javascript函数中的apply()和call()
原创
©著作权归作者所有:来自51CTO博客作者陈小知的原创作品,请联系作者获取转载授权,否则将追究法律责任
在ES中,函数也是是对象的一种,每个函数都包含两个属性:length和prototype,且每个函数包含两个非继承而来的方法apply()和call()。这两个方法都是在作用域中调用函数,相当于设置函数内this对象值。
1.obj.apply(db,arr) db是作用域,arr是一组参数
db: 第一个参数是 this 的指向对象;
arr:第二个参数可以是Array的实例,也可以是arguments对象——不能直接使用字符串当参数,需要放到数组里面
var name = "张二" ;age= "16";
var obj = {
name:"李三",
o_age: this.age,
mf:function(who){
console.log(this.age+"岁的"+this.name+"吃"+who+"的饭");
}
}
var db = {
name:"王五",
age:"36"
}
obj.mf.apply(db,["姑姑"]); //35岁的王五吃姑姑家的饭
2.obj.call(db,"str1","str2"...) db是作用域,第二个之后的数据是字符串参数,传递的参数必须列举出来!
var obj = {
name:"李三",
o_age: this.age,
mf:function(f,t){
console.log(this.name+"年龄:"+this.age+",来自"+f+"要去"+t);
}
}
var db = {
name:"王五",
age:"36"
}
obj.mf.call(db,'郑州',"上海");//王五年龄:36,来自郑州要去上海
公式的中obj提供方法,db提供数据,相对来说,db数据劫持了obj的方法,而obj继承了db的属性数据
另外,call和apply等,继承不了父类原型对象上的属性,只能继承构造函数内的属性