var Person = function(){
this.str = "person str";
return {
this.str = "new person str";
}
};
var person1 = new Person();
console.log(person1.str); //输出"new person str"
//不出所料,输出"person1:Grubby"
var printForPerson1 = print.bind(person1);
printForPerson1("person1");
//输出"person2:Moon",绑定的时候传参和执行的时候传参都可以
var printForPerson2 = print.bind(person2,"person2");
printForPerson2();
//printForPerson1()中的this依据被绑定,纵使以person2.print()方法的方式执行,依然输出person1的name
person2.print = printForPerson1;
person2.print("person2");
2.2.3 用途
通过借用其他对象的方法,实现类似继承的效果
//Person构造函数,可以指定name
var Person = function(name){
this.name = name;
};
//Student构造函数
var Student = function(){
Person.apply(this,arguments); //借用Person的构造函数
};
//为学生添加一个说出自己名字的方法
Student.prototype.sayName = function(){
return this.name;
};
//实例化一个William学生
var student1 = new Student("William");
//虽然学生本身没有name属性,但是最终输出 "William"
console.log(student1.sayName());
利用call和apply求一个数组的最大或者最小值
var arr = [45,88,634,22,436,879];
var maxNum = Math.max.apply(Math, arr);
console.log(maxNum);
var minNum = Math.min.call(Math,45,88,634,22,436,879);
console.log(minNum);
利用call和apply合并数组
var arr1 = [1,2,3];
var arr2 = [4,5,6];
[].push.apply(arr1, arr2);
console.log(arr1);
//输出: [1, 2, 3, 4, 5, 6]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q