`

JS中apply方法的使用

    博客分类:
  • JS
 
阅读更多
1、对象的继承,一般的做法是复制:Object.extend
prototype.js的实现方式是:
Object.extend = function(destination, source) { 
    for (property in source) { 
        destination[property] = source[property]; 
    } 
    return destination; 
}

除此之外,还有种方法,就是:Function.apply(当然使用Function.call也是可以的)apply方法能劫持另外一个对象的方法,继承另外一个对象的属性

Function.apply(obj,args)方法能接收两个参数
    obj:这个对象将代替Function类里this对象
    args:这个是数组,它将作为参数传给Function(args-->arguments)

apply示范代码如下:
<script> 
function Person(name,age){   //定义一个类,人类  
    this.name=name;     //名字  
    this.age=age;       //年龄 
    this.sayhello=function(){alert("hello")};
} 
function Print(){            //显示类的属性 
    this.funcName="Print"; 
    this.show=function(){      
        var msg=[];
        for(var key in this){ 
            if(typeof(this[key])!="function"){
                msg.push([key,":",this[key]].join(""));
            }
        } 
        alert(msg.join(" "));
    };
} 
function Student(name,age,grade,school){    //学生类 
    Person.apply(this,arguments);
    Print.apply(this,arguments);
    this.grade=grade;                //年级 
    this.school=school;                 //学校 
} 
var p1=new Person("jake",10);
p1.sayhello();
var s1=new Student("tom",13,6,"清华小学");
s1.show();
s1.sayhello();
alert(s1.funcName);
</script>

学生类本来不具备任何方法,但是在Person.apply(this,arguments)后,他就具备了Person类的sayhello方法和所有属性。
在Print.apply(this,arguments)后就自动得到了show()方法

2、利用Apply的参数数组化来提高

Function.apply()在提升程序性能方面的技巧

我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所有参数中的最大值。

比如
alert(Math.max(5,8))   //8
alert(Math.max(5,7,9,3,1,6))   //9


但是在很多情况下,我们需要找出数组中最大的元素。
var arr=[5,7,9,1]
alert(Math.max(arr))    // 这样却是不行的。一定要这样写

function getMax(arr){
    var arrLen=arr.length;
    for(var i=0,ret=arr[0];i<arrLen;i++){
        ret=Math.max(ret,arr[i]);       
    }
    return ret;
}

这样写麻烦而且低效。如果用 apply呢,看代码:
function getMax2(arr){
    return Math.max.apply(null,arr);
}

两段代码达到了同样的目的,但是getMax2却优雅,高效,简洁得多。



再比如数组的push方法。
var arr1=[1,3,4];
var arr2=[3,4,5];
如果我们要把 arr2展开,然后一个一个追加到arr1中去,最后让arr1=[1,3,4,3,4,5]
arr1.push(arr2)显然是不行的。 因为这样做会得到[1,3,4,[3,4,5]]

我们只能用一个循环去一个一个的push(当然也可以用arr1.concat(arr2),但是concat方法并不改变arr1本身)
var arrLen=arr2.length
for(var i=0;i<arrLen;i++){
    arr1.push(arr2[i]);
}


自从有了Apply,事情就变得如此简单
Array.prototype.push.apply(arr1,arr2)

分享到:
评论

相关推荐

    JavaScript中call与apply方法

    JavaScript中call与apply方法

    js中apply方法的使用详细解析.docx

    JavaScript中的`apply`方法是`Function.prototype`的一个内置方法,用于改变函数调用时的上下文(即`this`的指向)以及将参数以数组的形式传递给函数。这个方法对于理解和实现面向对象编程中的继承机制、处理数组...

    淡淡简单描述javascript中方法apply和call

    淡淡简单描述javascript中方法apply和call

    apply应用小结

    4. 实战应用:可能包含了一些实际项目中使用`apply()`解决特定问题的例子,如函数组合、事件处理等。 标签中的“源码”可能意味着文章深入探讨了`apply()`在某些开源库或框架源码中的应用,帮助读者理解其内部工作...

    js中apply方法的使用详细解析

    1、对象的继承,一般的做法是复制:Object.extendprototype.js的... }除此之外,还有种方法,就是:Function.apply(当然使用Function.call也是可以的) apply方法能劫持另外一个对象的方法,继承另外一个对象的属性

    关于Javascript中call与apply的进一步探讨

    在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...

    js利用apply(), Math object, js数组,对象完全智能验证

    在提供的压缩包文件"validate"中,很可能包含了实现这些验证功能的示例代码或者练习,供学习者进一步理解和实践JavaScript中`apply()`的应用、Math对象的使用以及数组和对象的验证方法。通过深入学习和实践这些知识...

    Js apply方法详解

    比如,如果你有一个父构造函数,想要继承其属性和方法到子构造函数中,可以在子构造函数中使用apply方法,将父构造函数内的this绑定到子构造函数的实例上,这样就可以把父构造函数中定义的属性和方法应用到子构造...

    JS中用法apply方法通过不同数量的参数调用函数的方法_.docx

    JavaScript中的`apply()`方法是函数调用的一种方式,它允许我们改变函数内部`this`的指向,并且可以灵活处理参数传递。在JavaScript中,`this`关键字通常表示函数执行时的上下文,即函数被调用的位置。`apply()`方法...

    ext js 4.1apply && override

    `Ext.apply`是Ext JS框架中的一个核心方法,主要用于对象的属性合并。此方法能够将一个或多个对象的属性复制到目标对象中,从而实现对象之间的扩展和覆盖。 ##### 1. 基本用法 `Ext.apply`的基本语法如下: ```...

    js中apply和call的理解与使用方法

    JavaScript中的apply和call方法是函数对象上的两个重要方法,它们都用于显式设置函数体内this的值。虽然这两个方法在功能上非常相似,但它们在使用参数上存在明显的区别。本文将详细介绍apply和call的区别、用法以及...

    JS中的call、apply、bind方法详解.pdf

    JS中的call、apply、bind方法详解 随着JavaScript的发展,函数调用对象的改变变得越来越重要。在JavaScript中,call、apply、bind三个方法都是函数对象的方法,它们的作用都是改变函数的调用对象。下面,我们将详细...

    js中arguments,caller,callee,apply的用法小结.docx

    在JavaScript中,arguments、caller、callee和apply是四个与函数调用相关的特性,它们在编写高级和复杂的函数逻辑时非常有用。下面将详细介绍这些概念及其用法。 1. **arguments对象** arguments对象是一个特殊...

    js中apply与call简单用法详解.docx

    下面将详细介绍`call`和`apply`的使用方法及其应用场景。 #### 二、call方法详解 `call`方法的第一个参数是用来指定函数执行时的上下文(this指向的对象),剩下的参数则依次为函数调用时需要传递的参数。 **基本...

    深化理解关于javascript中apply()和call()方法的区分_.docx

    在JavaScript中,`apply()`和`call()`方法都是用于改变函数调用时的上下文(即`this`关键字指向的对象)以及传递参数。这两个方法都隶属于`Function.prototype`,因此所有函数实例都拥有这两个方法。它们的主要作用...

    JS中使用apply方法通过不同数量的参数调用函数的方法

    在ES5及更早版本中,`apply()`方法是JavaScript的核心特性之一,它允许开发者在调用函数时指定函数内的`this`值以及向函数传递参数。`apply()`方法在函数调用中扮演着重要的角色,尤其是在处理不同数量参数的情况时...

    关于JS数组追加数组采用push.apply的问题

    JS数组追加数组没有现成的函数,这么多年我已经习惯了a.push.apply(a, b);这种自以为很酷的,不需要写for循环的写法,一直也没遇到什么问题,直到今天我要append的b是个很大的数组时才遇到了坑。

    JS apply用法总结和使用场景实例分析

    JS中apply的用法是JavaScript开发者必须掌握的重要知识点之一,尤其在面向对象编程和函数编程中有着广泛的应用。apply方法在函数对象上,它接受两个参数,第一个参数是绑定的this值,第二个参数是一个包含多个参数的...

    JavaScript中this关键字使用方法详解

    在JavaScript编程语言中,`this`关键字是一个至关重要的概念,它常常引发初学者的困惑,因为它的值在不同的上下文中可能会有所不同。`this`关键字主要用来引用对象的上下文,或者说是当前执行环境中的对象。在本文中...

Global site tag (gtag.js) - Google Analytics