js方法apply&call小结
当你想使用某个方法,而你自己却没有但是别人有的时候,那你就用他的方法呗,你调他的方法,但是要传入你和你的参数,apply&call大概就是为了这个目的产生的~
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。
二者的作用完全一样,只是接受参数的方式不太一样。
例如,有一个函数 func1 定义如下:
var func1 = function(arg1, arg2) {};
可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。
call 和 apply的定义说明:call和apply 是函数的非继承方法,在某个特定作用范围内调用某个函数,设置函数体内this对象的值
function NJie(){ this.name = "Njie", this.sayName = function(){ console.log(this.name); } } function KK(){ this.name ="KK"; } var n = new NJie(); var k = new KK(); n.sayName(); //NJie n.sayName.call(k); //KK
总结:比如说:k 对象没有 sayName 的函数,而 n 有这个函数,那 k 就通过call 来借 n的 sayName使用,当然也要把在 k 中的值带入到方法里。
// 父类 function Person(name,age){ this.name = name; this.age = age; } //子类 学生 function Student(name,age,grade){ Person.apply(this,arguments); //子类继承了父类 // Person.call(this,name,age); //当然,也可以使用 call的方法 this.grade = grade; } //创建一个学生的实例 var s1 = new Student("WW","18","一年级"); console.log("您好,",s1.name,"您今年",s1.age,"岁,就读于",s1.grade,",实在太棒了");
郑重声明:本博客仅用于个人整理和总结学习笔记,如有任何疑问欢迎留言!

浙公网安备 33010602011771号