和call()方法的区别
apply和call方法定义及apply和call方法的区别
1、方法定义
call,?
apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call,
apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.
call方法:
语法:call([thisObj[,arg1[, arg2[, ? [,.argN]]]]])?
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。?
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])?
定义:应用某一对象的一个方法,用另一个对象替换当前对象。?
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。?
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数
call, apply作用就是借用别人的方法来调用,就像调用自己的一样.
它们的不同之处:
apply:最多只能有两个参数——新this对象和一个数组?
argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。如果 argArray?
不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj?
任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
call:则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
更简单地说,apply和call功能一样,只是传入的参数列表形式不同:如 func.call(func1,var1,var2,var3)对应的apply写法为:
func.apply(func1,[var1,var2,var3])
如:
add.apply(sub,[3,1]);//add.call(sub,3,1);
var?a={
n:1,
m:2,
add:function(){
return?this.n+this.m;
}
}
var?b={n:3,m:4
}
console.log(a.add.call(b));//b.n+b.m=7
function?Animal(){
this.name?=?"Animal";
this.showName?=?function(){
alert(this.name);
}
}
function?Cat(){
this.name?=?"Cat";
}
var?animal?=?new?Animal();
var?cat?=?new?Cat();
//通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。
//输入结果为"Cat"
animal.showName.call(cat,",");
animal.showName.apply(cat,[]);
Why not和 Why don't的区别:
1、两个句子结构不同:why don't + 主语 + 动词;why not一定要直接跟动词,动词前不能有其他成分
2、why don't 结构可以有时态的变化,比如变为过去why didn't,完成式 why haven't 等,why not没有时态变化
3、why not可以独立成句,而why don't不可以。
扩展资料:
这两个句式,在表达"建议"时,是一样的意思.既"(你)为什么不做.....?",或"(你)应该做.....".如:
1、Why don't you turn to the reference book?
2、Why not turn to the reference book?
"(你)为什么不看参考书呢?"也就是"你应该看一下参考书".
但是Why don't you do还可以作为一个疑问句使用,提出疑问.如:
Why didn't you see the football match?
"你为什么没有看这场足球赛?"
参考资料:
百度百科——why鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!