js apply使用

js中apply方法的使用

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 type="text/javascript">
    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却优雅,高效,简洁得多。

 <script type="text/javascript">
    //方法apply 第二个参数为数组
    var arr = [1,2,3,4,5];
    //alert(Math.max(arr)); //NaN
    var max = Math.max.apply(null,arr);
    alert(max); //5
  </script>

再比如数组的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)

<script type="text/javascript">
    //将多个数组push
    var a1 = [1,2,3,4,5];
    var a2 = [6,7,8,9,10];
    a1.push(a2);
    alert(a1); //[1,2,3,4,5,[6,7,8,9,10]];
    alert(a1.length); // 长度6

    var a3 = [1,2,3,4,5];
    var a4 = [6,7,8,9,10];
    [].push.apply(a3,a4);
    alert(a3); //[1,2,3,4,5,6,7,8,9,10]
    alert(a3.length); // 长度 10

    var a5 = [1,2,3,4,5];
    var a6 = [6,7,8,9,10];

    Array.prototype.push.apply(a5,a6);
    alert(a5); //[1,2,3,4,5,6,7,8,9,10]
    alert(a5.length); // 长度10
  </script>

js apply使用,布布扣,bubuko.com

时间: 2024-10-28 20:06:59

js apply使用的相关文章

Js apply()

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享.. 如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply) 我

Js apply 方法 具体解释

Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了,在这里我做例如以下笔记,希望和大家分享..  如有什么不正确的或者说法不明白的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.        apply和call的差别在哪里 2.        什么情况下用apply,什么情况下用call 3.        ap

js apply 和call的区别

function Person(name, profession) { this.name = name; this.profession = profession; this.speak = function () { document.writeln("我叫"+name+",我是一位"+profession); } } function Student(name,profession) { Person.call(this,name,profession); }

js apply()用法

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply)

Js apply call方法详解

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply)

Js apply 方法 详解

Js apply方法详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.        apply和call的区别在哪里 2.        什么情况下用apply,什么情况下用call 3.        apply的其他

由js apply与call方法想到的js数据类型(原始类型和引用类型)

原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b,那么此时第一个参数就为a,没有则为null),call方法第二个参数为一个列表,可以是 obj.call(null, 1,2,3,4); 而apply第二个参数为数组.这就是区别,下面来说说对它们的认识. apply最常用的就是查找数组中的最大与最小值,还可以将2个数组合并: var max=Mat

js apply()与call()方法详解

摘自此处:http://blog.csdn.net/business122/article/details/8000676 Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在

JS apply()与call()

函数的属性和方法 JS中的函数是对象,因此函数也有属性和方法. 每个函数都包含两个属性:length和prototype. length属性,表示函数希望接收的命名参数的个数. prototype属性,是保存它们所有实例方法的真正所在. 在ECMAScript5中,prototype属性是不可枚举的. 每个函数都拥有两个非继承而来的方法:apply()和call(). 这两个方法的用途都是在特定的作用域中调用函数:实际上等于设置函数体内this对象的值. apply()方法接收两个参数:一个是在