谁可以帮我解释下
call()
apply()
的区别,谢谢!看半天没有反映
call()
apply()
的区别,谢谢!看半天没有反映
解决方案 »
- 菜鸟求救。。 想做个导航点击后添加样式。、、、
- jsp和flash做的幻灯片程序,关于(_self连接)
- 新手入门问题
- javascript 调用OCX,方法中有一参数为对像
- 如何在Mozilla中出发DIV 的onfocus事件
- 如何用正则替换HTML代码中的文字部分?
- java的简单问题.
- JS中,如何检查文本框中输入的是否为由逗号分隔的一串数字,并且每个数字都以8开头?
- 请问:把javascript代码组织成一个js文件和把其直接嵌入到html页面中有那些区别?
- 【下个月估计不会来js了,感谢所有帮过的人和想帮助我的人!散分】
- 关于GOOGLE MAP的一个问题
- jquery的contextMenu插件如何响应右键事件的,有人知道吗?
下面来看另一个应用
call和apply还有一个技巧在里面,就是用call和apply应用另一个函数(类)以后,当前的函数(类)就具备了另一个函数(类)的方法或者是属性,这也可以称之为“继承”。看下面示例。
// inherit
function base() {
this.member = "never-online";
this.method = function() {
window.alert(this.member);
}
}
function extend() {
base.call(this);
window.alert(member);
window.alert(this.method);
}
上面的例子可以看出,通过call之后,extend可以继承到base的方法和属性。
再看一个apply的应用
// advanced apply demo
function adApplyDemo(x) {
return ("this is never-online, BlueDestiny '" + x + "' demo");
}
function handleAdApplyDemo(obj, fname, before) {
var oldFunc = obj[fname];
obj[fname] = function() {
return oldFunc.apply(this, before(arguments));
};
}
function hellowordFunc(args) {
args[0] = "hello " + args[0];
return args;
}
function applyBefore() {
alert(adApplyDemo("world"));
}
function applyAfter() {
handleAdApplyDemo(this, "adApplyDemo", hellowordFunc);
alert(adApplyDemo("world")); // Hello world!
}
需要注意的是,要先点"原始的adApplyDemo('world')"按钮,如果先点"应用后的adApplyDemo('world')"按扭,会先应用了apply方法,这样原始的值将会被改变。或许有的朋友没有发现有什么特别的,我在这里指明一下,当点击左边的按扭时,只有"this is never-online, BlueDestiny 'world' demo", 当点击右边的按扭后,会现结果是"this is never-online, BlueDestiny 'hello world' demo",再点点左边的按扭,看看结果又会是什么呢?自己试试看:D,已经改写了函数adApplyDemo。这个例子则说明了call和apply的“真正”作用了。