我们经常在javascipt中的面向对象应用中遇到
call和apply函数;有时会被搞糊涂。其实它们可以改变函数或对象中的this保留字的值;this保留字的默认值就是这个类本身。举例说明:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script language="javascript">
test = {
<wbr>value : 'self.value',<br><wbr>exec<wbr> : function(){<br><wbr><wbr>alert(this.value);<br><wbr>}<br>
}<br>
function hhh(obj){<br><wbr> test.exec();<br><wbr> test.exec.apply(obj);<br>
}<br>
</script><br>
</head></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<body>
<input type="button" onclick="hhh(this);" value="input.value"/>
</body>
</html>
运行以上的页面就很快明白了.
<wbr></wbr>
call和apply函数可以处理匿名函数
关于类的初始化应用如下:
Person = function(){
<wbr>this.Init.apply(this, arguments);<br>
};<br>
Person.prototype = {<br><wbr>first : null,<br><wbr>last : null,<br><wbr>Init : function(first, last){<br><wbr><wbr><wbr> this.first = first;<br><wbr><wbr><wbr> this.last = last;<wbr><br><wbr>},<br><wbr>fullName : function(){<br><wbr><wbr><wbr> return this.first + ' ' + this.last;<wbr><br><wbr>},<br><wbr>fullNameReversed : function(){<br><wbr><wbr><wbr> return this.last + ', ' + this.first;<wbr><wbr><br><wbr>}<br>
};</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
var s = new Person2('creese', 'yang');
alert(s.fullName());
alert(s.fullNameReversed());
<wbr></wbr>
call和apply函数可以赋值函数内容(带匿名参数;但不触发)
关于函数绑定事件应用如下:
Function.prototype.BindForEvent = function() {
<wbr> var __m = this, object = arguments[0], args = new Array();<br><wbr> for(var i = 1; i < arguments.length; i++){<br><wbr><wbr>args.push(arguments[i]);<br><wbr>}<br><wbr> return function(event) {<br><wbr><wbr><wbr> return __m.apply(object, [( event || window.event)].concat(args));<br><wbr> }<br>
}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
call和apply函数关于函数绑定参数应用如下:
Function.prototype.Bind = function() {
<wbr> var __m = this, object = arguments[0], args = new Array();<br><wbr> for(var i = 1; i < arguments.length; i++){<br><wbr><wbr>args.push(arguments[i]);<br><wbr>}<br><wbr> return function() {<br><wbr><wbr><wbr> return __m.apply(object, args);<br><wbr> }<br>
}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
call和apply函数功能是一样的;就是参数格式不同;fun.call(obj, arguments);apply的arguments是数组形式;call则是单数形式。
分享到:
相关推荐
本文实例讲述了JS中call和apply函数用法。分享给大家供大家参考,具体如下: call 函数 语法 obj.call(thisObj,arg[,arg2[,arg3[,...agr]]]); 简介 thisObj继承obj的属性和方法(obj原型链上的属性和方法不能被继承),...
一些简单的Javascript操作中较少会用到call和apply函数,在另外一些较大型的操作中,如web应用开发,js框架开发中可能会经常遇到这两个函数。关于这两个函数的解释,网上的资料也很多,但是本人认为很多资料要么...
主要介绍了javascript基于原型链的继承及call和apply函数用法,结合实例形式较为详细的分析了javascript中继承的概念、创建方法以及call和apply函数的功能与使用技巧,需要的朋友可以参考下
JavaScript中的apply和call函数详解_.docx
在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向 语法: apply() 接收两...
本文实例讲述了javascript中call,apply,bind函数用法。分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 ...
本文实例分析了JavaScript中call和apply方法的区别。分享给大家供大家参考,具体如下: 这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别: 1、首先,JavaScript是一门面向对象的语言...
JavaScript函数之call、apply以及bind方法案例详解 总结 1、相同点 2、区别 call() 方法 /* 正常模式 */ let obj = { sum(a, b) { console.log(this) return a + b } } // 执行 sum 函数的 apply、bind...
我们可以将call和apply看做是某个对象的方法,通过调用方法的形式来间接调用函数
前天去面试,有个gg问了一些js知识,其中有一道call与apply用法的题目,尽管在365天前用过call方法,但当时还是没能答上来,今天深入总结一下 call和apply,它们的作用都是将函数绑定到另外一个对象上去运行 两者的...
js代码-JavaScript的call/apply/bind函数实现
简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别在于传参不同。 call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null。参数以逗号分开进行传值,参数可以是任何类型。 apply(obj,...
在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要...
每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,JavaScript中的每个函数都是一个对象。看一下 ...
这篇文章主要介绍了JavaScript函数Call、Apply原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、方法重用 使用 call() 方法,您可以编写能够在...
以下内容会分为如下小节: ...6.call,apply,bind方法的联系和区别 1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法?