zoukankan      html  css  js  c++  java
  • 函数的四种调用模式

     
    1  函数模式
         最普通的函数调用
     1 // 声明式函数
     2 function fn1 () {
     3      console.log(this);
     4 }
     5 // 函数表达式函数
     6 var fn2 = function() {
     7      console.log(this);
     8 };
     9 // 调用 函数中this表示全局对象,在浏览器中就是指window
    10 fn1();     //window
    11 fn2();     //window
     
    2 方法模式
         函数依附于一个对象,是对象的一个属性,我们再调用这个函数。这种模式就是方法调用模式。
     
    1 var obj = {
    2     name: "zhangSan",
    3     sayHi: function () {
    4         console.log(this);
    5     }
    6 };
    7 obj.sayHi(); //obj对象
     
    3 构造器调用模式
    即是构造函数的调用,一般是通过new + 函数名( )
    这种模式和以上的方法模式没本质的区别
     
     1 function Person() {}
     2 var tom = new Person(); // 这就是构造器函数的调用 
     3 
     4 // 构造函数调用的详细过程
     5 // 1 会在内部创建一个对象o
     6 // 2 给对象赋值(this), 然后执行各种操作
     7 // 3 返回这个对象o
     8 
     9 
    10 // 构造函数的返回值:
    11  //
    12  //   有一个默认的返回值,新创建的对象(实例);
    13  //   当手动添加返回值后(return语句):
    14  //         1. 返回值是基本数据类型-->真正的返回值还是那个新创建的对象(即实例)
    15  //       2. 返回值是复杂数据类型(对象)-->真正的返回值是这个对象
     
    4 上下文模式
    本质--对象借用不属于该对象的方法(函数),即我们自定义this的指向
    这时候就需要call和apply这两个方法
     
    1     //Function.prototype.call ()
    2     //Function.prototype.apply ()
    3     //——>任何函数都可以调用call和apply方法
    4 
    5     // 第一个参数控制this的指向,第二个参数:
    6                在使用 上下文调用的 时候, 原函数(方法)可能会带有参数, 那么这个参数在上下文调用中使用 第二个( 第 n 个 )参数来表示
    1     //伪数组
    2     var o={ 0:10,1:20,length:2 };
    3 
    4     //让o对象借用数组的push方法来添加元素
    5     //[].push.call(o,30,50,70)
    6     [].push.apply(o,[1,2,3])
    7     console.log(o);//其中对象o中length属性的值也会改变的哦
     
  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/2010master/p/6029967.html
Copyright © 2011-2022 走看看