zoukankan      html  css  js  c++  java
  • js中this的四种调用模式

    在javascript中一共有四种调用模式:方法调用模式,函数调用模式,构造器调用模式,apply调用模式

    这些模式在如何初始化关键参数this上存在差异。

    1 方法调用模式(也就是用"."的方式来调用的)

    当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果一个调用表达式包含一个属性存取表达式(即一个.点表达式或者[subscript]下标表达式),那么它被当做一个方法来调用

    var myObject = {

      value :0;

      increment:fucntion (inc){

        this.value += typeof inc ==='number' ? inc:1;

      }

    };

    myObject.increment();

    document.writeln(myObject.value);  //1

    myObject.increment(2);

    document.writeln(myObject.value);  //3

    方法可以使用this去访问对象,所以它能从对象中取得或修改该对象。this到对象的绑定发生在调用的时候。这个“超级”迟绑定( very late binding)使得函数可以对this高度复用。通过this可取得它们所属对象的上下文的方法称为公共方法。

    2 函数调用模式

    当一个函数并非一个对象的属性是,那么它被当做一个函数来调用:
    var sum = add(3,4); //sum的值为7
    当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误,倘若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误错误的后果是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:如果该方法定义一个变量并给他赋值为this,那么内部函数就可以通过那个变量访问到this。
    //给myObject增加一个double方法
    myObject.double = function(){
        var that = this; //解决方案
        var helper = function(){
            that.value = add(that.value,that.value);
        };
        helper();//以函数的形式调用helper
    };
    //以方法的形式调用double
    myObject.double();
    document.writeln(myObject.getValue()); //6

  • 相关阅读:
    git基本
    openwrt 固件的uci系统
    openwrt刷固件恢复原厂固件
    openwrt 登录管理页面openwrt管理页面密码
    openwrt固件升级方法
    OpenWrt简要介绍openwrt开发
    X86 openWRT 虚拟机编译教程 在ubuntu10中X86 OpenWRT的源码编译
    无线热点认证解决方案 WifiDog
    怎么把wifidog直接编译进openwrt
    portal为什么选择开源路由器第三方固件 OpenWrt
  • 原文地址:https://www.cnblogs.com/RightDear/p/3230618.html
Copyright © 2011-2022 走看看