IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    javascript apply()方法再学习

    admin发表于 2015-10-12 12:25:00
    love 0

    apply() 方法在指定 this 值和参数(参数以数组或类数组对象的形式存在)的情况下调用某个函数。
    在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。
    JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。

    语法:fun.apply(thisArg[, argsArray])
    让fun函数在this作用域下运行,array则作为参数传给fun函数

    thisArg
    在 fun 函数运行时指定的 this 值。需要注意的是,指定的 this 值并不一定是该函数执行时真正的 this 值,如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的 this 会指向该原始值的自动包装对象。
    argsArray
    一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fun 函数。如果该参数的值为null 或 undefined,则表示不需要传入任何参数。

    function fruits() {}
    fruits.prototype = {
        color: "red",
        say: function() {
            console.log("My color is " + this.color);
        }
    }
     
    var apple = new fruits;
    apple.say();    //My color is red

    但是如果我们有一个对象banana= {color : “yellow”} ,我们不想对它重新定义 say 方法,那么我们可以通过 call 或 apply 用 apple 的 say 方法:

    banana = {
        color: "yellow"
    }
    apple.say.call(banana);     //My color is yellow
    apple.say.apply(banana);    //My color is yellow

    所以,可以看出 call 和 apply 是为了动态改变 this 而出现的,当一个 object 没有某个方法(本栗子中banana没有say方法),但是其他的有(本栗子中apple有say方法),我们可以借助call或apply用其它对象的方法来操作。

    示例:
    1、数组之间追加

    var array1 = [12 , "foo" , {name "Joe"} , -2458]; 
    var array2 = ["Doe" , 555 , 100]; 
    Array.prototype.push.apply(array1, array2); 
    /* array1 值为  [12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */

    此处方法为 Array.prototype.push , this为array1 , 参数为 array2

    2、代理 console.log 方法

    function log(){
      console.log.apply(console, arguments);
    };
    log(1);    //1
    log(1,2);    //1 2

    参考:
    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
    http://www.cnblogs.com/coco1s/p/4833199.html
    http://www.cnblogs.com/xxxxBW/p/4872343.html


    © admin for 可乐吧, 2015. | Permalink | No comment | Add to del.icio.us
    Post tags: apply()方法

    您可能也喜欢:
    json学习小记
    JavaScript 对象(Object)学习(二)
    Sass 入门学习篇
    javascript return说明
    无觅

    Feed enhanced by Better Feed from Ozh



沪ICP备19023445号-2号
友情链接