`

关于js中call和apply函数的应用

 
阅读更多
我们经常在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> &lt;/script&gt;<br> &lt;/head&gt;</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 &lt; 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 &lt; 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函数用法实例分析

    本文实例讲述了JS中call和apply函数用法。分享给大家供大家参考,具体如下: call 函数 语法 obj.call(thisObj,arg[,arg2[,arg3[,...agr]]]); 简介 thisObj继承obj的属性和方法(obj原型链上的属性和方法不能被继承),...

    Javascript中call和apply函数的比较和使用实例

    一些简单的Javascript操作中较少会用到call和apply函数,在另外一些较大型的操作中,如web应用开发,js框架开发中可能会经常遇到这两个函数。关于这两个函数的解释,网上的资料也很多,但是本人认为很多资料要么...

    javascript基于原型链的继承及call和apply函数用法分析

    主要介绍了javascript基于原型链的继承及call和apply函数用法,结合实例形式较为详细的分析了javascript中继承的概念、创建方法以及call和apply函数的功能与使用技巧,需要的朋友可以参考下

    JavaScript中的apply和call函数详解_.docx

    JavaScript中的apply和call函数详解_.docx

    JS中的call()和apply()方法的详解

    在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向 语法: apply() 接收两...

    javascript中call,apply,bind函数用法示例

    本文实例讲述了javascript中call,apply,bind函数用法。分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 ...

    JavaScript中call和apply方法的区别实例分析

    本文实例分析了JavaScript中call和apply方法的区别。分享给大家供大家参考,具体如下: 这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别: 1、首先,JavaScript是一门面向对象的语言...

    【JavaScript源代码】JavaScript函数之call、apply以及bind方法案例详解.docx

    JavaScript函数之call、apply以及bind方法案例详解  总结 1、相同点 2、区别 call() 方法 /* 正常模式 */ let obj = { sum(a, b) { console.log(this) return a + b } } // 执行 sum 函数的 apply、bind...

    javascript中call和apply方法浅谈

    我们可以将call和apply看做是某个对象的方法,通过调用方法的形式来间接调用函数

    js中call与apply的用法小结

    前天去面试,有个gg问了一些js知识,其中有一道call与apply用法的题目,尽管在365天前用过call方法,但当时还是没能答上来,今天深入总结一下 call和apply,它们的作用都是将函数绑定到另外一个对象上去运行 两者的...

    js代码-JavaScript的call/apply/bind函数实现

    js代码-JavaScript的call/apply/bind函数实现

    Javascript 中的 call 和 apply使用介绍

    简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别在于传参不同。 call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null。参数以逗号分开进行传值,参数可以是任何类型。 apply(obj,...

    javascript中call apply 的应用场景

    在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要...

    JavaScript中的apply和call函数详解

    每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,JavaScript中的每个函数都是一个对象。看一下 ...

    JavaScript函数Call、Apply原理实例解析

    这篇文章主要介绍了JavaScript函数Call、Apply原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、方法重用 使用 call() 方法,您可以编写能够在...

    Javascript中call,apply,bind方法的详解与总结

    以下内容会分为如下小节: ...6.call,apply,bind方法的联系和区别 1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法?

Global site tag (gtag.js) - Google Analytics