zoukankan      html  css  js  c++  java
  • 可以改变this指向的方法

    this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍三种方式:

    1.call用作继承时:

    function Parent(age){
        this.name=['mike','jack','smith'];
        this.age=age;
    }
    function Child(age){
        Parent.call(this,age);//把this指向Parent,同时还可以传递参数
    }
    var test=new Child(21);
    console.log(test.age);//21
    console.log(test.name);
    
    test.name.push('bill');
    console.log(test.name);//mike,jack,smith,bill

    2.call和apply都可以改变this指向,不过call的第二个参数是散列分布,apply则可以是一个数组

    console.log(Math.max.apply(null,[1,2,3,4]));//4

    apply() 方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是arguments 对象。call() 方法与 apply() 方法的作用相同,它们的区别仅在于接收参数的方式不同。对于 call()方法而言,第一个参数是 this 值没有变化,变化的是其余参数都直接传递给函数。换句话说,在使用call() 方法时,传递给函数的参数必须逐个列举出来。如 func.call(func1,var1,var2,var3)  对应的apply写法为:func.apply(func1,[var1,var2,var3]),同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入。 
    3.ES5还定义了一个方法:bind(),它会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。如

    window.color='red';
    var o={color:'blue'};
    
    function sayColor(){
        console.log(this.color);
    }
    var objectSaycolor=sayColor.bind(o);
    //var objectSaycolor=sayColor.bind();
    objectSaycolor();//blue

    在这里sayColor()调用bind()并传入对象o,创建了objectSayColor()函数。objectSayColor()函数的this值等于o,因此即使是在全局作用域中调用这个函数,也会看到blue。

    作者:haoxl
    出版:http://www.cnblogs.com/haoxl/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    MySQL_创建数据库和表
    MySQL注释的3中方法
    子查询概念和分类
    弱网测试如何进行
    Fiddler_ 移动端抓包配置IOS&Android,Fiddler获取APP端的流量
    Fiddler_HTTPS 如何抓包和浏览器设置
    Fiddler_弱网测试
    Three.js 游戏操作案例
    flex 教程
    JS知识
  • 原文地址:https://www.cnblogs.com/haoxl/p/5323708.html
Copyright © 2011-2022 走看看