JS函数的四种调用模式

 函数在js中具有四种身份,分别为函数、方法、构造函数、apply或call调用

函数调用

   函数调用模式中this指全局对象(window)

  var f1 = function() {
    alert("这个是函数调用");
    alert(this);
  };
  f1();

方法调用

 在方法调用模式中 this 表示当前对象

  var o = {name:"赵建宇"};
  o.say = function() {
        alert("这个是方法调用模式");
    alert(this.name);
    alert(this);
  };

  o.say();
  o.say = f1;
    o.say();

在闭包中有时会需要临时使用一个函数执行一个比较复杂的操作
  var o = {
  name : "赵建宇"
  , say : function() {
      // 方法 this就是o
      var that = this;
      (function() {
      // 处理一些较为复杂的操作,又要使用到这个对象
      alert("这个是" + that);
      })();
     }
  }

  o.say();

构造函数

任何一个函数放在new 后面就是构造函数,构造函数的this是构造函数返回的对象,构造函数的return发生变化,如果返回的是对象,直接返回,否则返回创建出来的对象

  var Person = function(n) {
    this.name = n;
      return {sex:"男"};
     // return 123;
  }
  var p = new Person();

函数的apply调用模式和call调用模式
 语法:
    函数名.apply(对象, [参数数组]);
  函数名.call(对象, 参数列表);
作用:
   当对象为null的时候,函数进行函数调用模式,
   当对象不为null的时候,函数实现方法调用模式

  var func = function() {
    this.name = "马伦";
    this.say = function(){alert(this.name + "牛逼");};
  };

  func.apply(null);
  // 等价于 func();

  var o = {};
  try {
    o.say();
  } catch(e) {
    alert(e);
  }

  func.apply(o);
  // 等价于 new func();

 

上一篇:狂神说java超市管理系统po层


下一篇:istio 常见的 10 个异常