3、call 和 apply
call方法JScript参考中的说明:调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[,
[,.argN]]]]]),但是没有示例
apply方法JScript参考中的说明:应用某一对象的一个方法,用另一个对象替换当前对象。apply([thisObj[,argArray]])
实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[,
arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合。下面来看看call, apply的具体应用
// simple call demo
function simpleCallDemo(arg) {
window.alert(arg);
}
function handleSPC(arg) {
simpleCallDemo.call(this, arg);
}
// simple apply demo
function simpleApplyDemo(arg) {
window.alert(arg);
}
function handleSPA(arg) {
simpleApplyDemo.apply(this, arguments);
}
从上面简单的例子可以看出,call和apply可以把当前的参数传递给另外一个函数的参数中,从而调用另一个函数的应用。有的时候这是一个很实用的方法,当然,用call或是apply(是参数或是数组),看实际情况而定了。
下面来看另一个应用
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的“真正”作用了。
相关推荐
理解JavaScript的caller callee call apply
NULL 博文链接:https://cuckoosnest.iteye.com/blog/470131
Javascript – 全面理解 caller,callee,call,apply Author: BlueDestiny, never-online From: http://www.never-online.net, Blog.csdn.net/BlueDestiny 1、caller JScript参考中说明为:返回一个对函数的...
理解Javascript的caller,callee,call,apply区别
挺好的,虽然我用的是jQuery,但感觉还是有些用的~~~
在看到大家如此关注JS里头的这几个对象,我试着把原文再修改一下,力求能再详细的阐明个中意义
主要介绍了javascript中call,apply,callee,caller用法,结合实例形式分析了javascript中call,apply,callee,caller功能、使用方法及相关操作注意事项,需要的朋友可以参考下
1.2、理解闭包 二、对象 2.1、对象常量(字面量) 2.2、取值 2.3、枚举(遍历) 2.4、更新与添加 2.5、对象的原型 2.6、删除 2.7、封装 三、函数 3.1、参数对象 (arguments) 3.2、构造函数 3.3、函数调用 3.3.1、...
JavaScript权威指南 犀牛书 Chapter 1. Introduction to JavaScript Section 1.1. JavaScript Myths Section 1.2. Versions of JavaScript Section 1.3. Client-Side JavaScript Section 1.4. JavaScript ...
callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 caller 属性 返回调用当前函数的函数引用。 catch 语句 包含在 try 语句块中的代码发生错误时执行的语句。 ceil 方法 返回大于或等于其数值...
正则表达式 call(),apply(),callee,caller,cookie方法,setInterval(),clearInterval(),setTimeout() ,clearTimeout()
javascript的官方文档 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题...