zoukankan      html  css  js  c++  java
  • bind、call、apply

    含义:  都是改变函数运行时的this指向。

    apply方法:

    1、apply接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数,以数组的形式传入,且当第一个参数为null、undefined的时候,默认指向window(在浏览器中)

    2、使用apply方法改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次。

    var obj = {
      name: 1,
      say: function(age,sex) {
        console.log(this.name,age,sex)  
       }  
    }
    
    var say = obj.say
    
    say.apply(obj,[12,'男'])

    call方法:

    1、call接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数,以参数列表的形式传入,且当第一个参数为null、undefined的时候,默认指向window(在浏览器中)

    2、使用call方法改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次。

    var obj = {
      name: 1,
      say: function(age,sex) {
        console.log(this.name,age,sex)  
       }  
    }
    
    var say = obj.say
    
    say.call(obj,12,'男')

    bind方法:

    1、bind接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数,以参数列表的形式传入,(但可以分多次传入)且当第一个参数为null、undefined的时候,默认指向window(在浏览器中)

    2、使用bind方法改变this指向后原函数不会立即执行,且此方法永久改变this指向。

    var obj = {
      name: 1,
      say: function(age,sex) {
        console.log(this.name,age,sex)  
       }  
    }
    
    var say = obj.say
    
    var s = say.bind(obj,12)
    
    s('男')

    模拟call方法:

    Function.prototype.myCall = function(context) {
     if(typeof this  !== 'function') throw new TypeError('not function')
      context = context || window
      context.fn = this
      let args = [...arguments].slice(1) //去掉context
      let result = context.fn(...args)  
      delete context.fn
      return result
    }

    模拟apply方法:

    Function.prototype.myApply = function(context,args = []) {
     if(typeof this  !== 'function') throw new TypeError('not function')
      context = context || window
      context.fn = this
      let result = context.fn(...args)  
      delete context.fn
      return result
    }

    模拟bind方法:

    Function.prototype.myBind = function(context) {
     if(typeof this  !== 'function') throw new TypeError('not function')
      context = context || window
      context.fn = this
    let args = [...arguments].slice(1) //去掉context
      return function (args) {
      return context.fn(...args)
     }
    }
  • 相关阅读:
    mysql数据库查询库中所有表所占空间大小
    mysql行转列
    mysql重置密码
    POJ1426 Find The Multiple —— BFS
    POJ3279 Fliptile —— 状态压缩 + 模拟
    POJ1077 Eight —— IDA*算法
    POJ1077 Eight —— A*算法
    POJ1077 Eight —— 双向BFS
    POJ1077 Eight —— 反向BFS
    POJ1077 Eight —— 正向BFS
  • 原文地址:https://www.cnblogs.com/yunnex-xw/p/12801912.html
Copyright © 2011-2022 走看看