call()
调用一个对象的一个方法,另一个对象替换当前对象。
call 方法可以用来代替另一个对象调用一个方法。
function add(a,b) { console.log(a+b); } function sub(a,b) { console.log(a-b); } add.call(sub,3,1);
这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为 4
call:和apply的意思一样,只不过是参数列表不一样. apply(o[1,2]) call(o,1,2)
f.calll(o);
f.apply(o);
Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表
function Person(name,age) { this.name=name; this.age=age; } /*定义一个学生类*/ function Student(name,age,grade) { Person.apply(this,arguments); this.grade=grade; } //创建一个学生类 var student=new Student("zhangsan",21,"一年级"); //测试 console.log("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade); /输出结果name:zhangsan age:21 grade:一年级 //学生类里没有给name和age属性赋值
bind
方法主要作用是将函数绑定某个对象
function f(y) {return this.x+y} //待绑定的函数 var o={x:1} //将要绑定的对象 var g=f.bind(o) //通过调用g(x)调用o.f(x) console.log(g(2)) // 3
ECMAScript 5中的bind方法不仅仅是将函数绑定到对象 还附带一些其他的应用 除了第一个实参
传入bind的实参也会绑定至this 是一种常见的函数式编程技术 又是被称为柯里化
function f(y,z){return this.x+y+z} //另外一个做累加计算的函数 var g = f.bind({x:1},2) //绑定this和y console.log(g(3) ) //6 this.x绑定到1 y绑定到2 z绑定到3