js的apply和call
call
和apply
都是用来修改函数中this的指向问题例如:
B.call(A, args1,args2,...);即A对象调用B对象的方法
function Person(name, age, sex, weight) { this.name = name; this.age = age; this.sex = sex; this.weight = weight; } Person.prototype.sayHi = function () { console.log("您好"); }; function Student(name,age,sex,weight,score) { //借用构造函数 // >> 会引用Person中的内容 // >> 一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向 // >> 此时Persion中的this指的是Student构造函数,所以Student中包含了Person中的属性,实现了继承 Person.call(this,name,age,sex,weight); this.score = score; } var stu1 = new Student("小明",10,"男","10kg","100"); console.log(stu1.name, stu1.age, stu1.sex, stu1.weight, stu1.score);
不同之处:
apply:最多只能有两个参数——新this对象和一个数组argArray。
call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表
实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。
function Person(age,sex) { this.age=age; this.sex=sex; } //通过原型添加方法 Person.prototype.sayHi=function (x,y) { console.log("您好啊:"+this.sex); return 1000; }; var per=new Person(10,"男"); per.sayHi(); console.log("=============="); function Student(name,sex) { this.name=name; this.sex=sex; } var stu=new Student("小明","人妖"); // apply传参形式 var r1=per.sayHi.apply(stu,[10,20]); // call传参形式 var r2=per.sayHi.call(stu,10,20); console.log(r1); console.log(r2);
保存redis相关笔记