在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等,继承不了父类原型对象上的属性,只能继承构造函数内的属性