Code前端首页关于Code前端联系我们

调用、申请、本金债券

terry 2年前 (2023-09-08) 阅读数 223 #Vue

致电、申请、介绍债券

不同的方法

  1. 用来修改这个函数的点,第一个参数是定义这个绑定对象,第二个参数是传递参数
  2. apply 第二个参数为数组形式
  3. 调用绑定第二个参数为参数列表形式
  4. apply和call是两个直接执行的函数,bind不会直接执行函数而是生成一个新函数

通话功能

     Function.prototype.myApply = function(context) {
            context = context ? Object(context) : window
    
            context.fn = this
    
            let args = arguments[1]
    
            let r = eval(`context.fn(${args.toString()})`)
    
            delete context.fn
    
            return r
        }
     
    的使用示例

在这个例子中,fn函数是全局定义的,没有对象可以调用这个fn方法,所以fn函数默认是this指向全局对象window ,那么本例中调用的方法就被修改了,函数fn的这一点对于obj对象来说就是这样的。
2)

let obj = {names: 'zhangsan'}
function fn(a,b,c) {
    //{names: "zhangsan"} 1 2 3
    console.log(this, a,b,c)
}
fn.call(obj,1,2,3)
 
  1. 手写源码
Function.prototype.myCall = function(context) {
        context = context ? Object(context) : window;
        // console.log('this', this)
        context.fn = this

        let args = []

        for(let i = 1; i<arguments.length; i++) {
            args.push(arguments[i])
        } 

        // let r = eval('context.fn(' + args.toString() + ')')
        let r = eval(`context.fn(${args.toString()})`)

        delete context.fn

        return r
    }

 

功能应用

     Function.prototype.myApply = function(context) {
            context = context ? Object(context) : window
    
            context.fn = this
    
            let args = arguments[1]
    
            let r = eval(`context.fn(${args.toString()})`)
    
            delete context.fn
    
            return r
        }
     
    的使用示例

本例中应用函数的使用方法与上面调用函数的方法基本相同,只是传递参数有所不同。 call方法接受多个形参,application方法接受一个数组作为形参。这里我们只需要改变一下调用方式即可。

    let obj = {names: 'zhangsan'}
    function fn(a,b,c) {
        console.log(this, a,b,c)
    }
    fn.apply(obj,[1,2,3])
 
  1. 手写源码
 Function.prototype.myApply = function(context) {
        context = context ? Object(context) : window

        context.fn = this

        let args = arguments[1]

        let r = eval(`context.fn(${args.toString()})`)

        delete context.fn

        return r
    }
 

装订功能

绑定功能与手机和功能应用只有一维不同,区别如下:


    bind 的传参方式和 call 一样,不同的是 call 是在修改这个点函数的时候执行函数,而 bind 修改这个点函数后不会立即执行函数,而是会产生这个修改。 point 函数,用户再调用开发者执行。


    bind 传递参数的方法与调用一致,与应用程序不同

     Function.prototype.myApply = function(context) {
            context = context ? Object(context) : window
    
            context.fn = this
    
            let args = arguments[1]
    
            let r = eval(`context.fn(${args.toString()})`)
    
            delete context.fn
    
            return r
        }
     
    的使用示例
    let obj = {names: 'zhangsan'}
    function fn(a,b,c) {
        console.log(this, a,b,c)
    }
    let back = fn.bind(obj,1,2,3)
    back()
 
  1. 手写源码
  Function.prototype.myBind = function(context) {
        context = context ? Object(context) : window
        
        let that = this

        let args = []

        for(let i = 1; i < arguments.length; i++) {
            args.push(arguments[i])
        }

        let r = eval(`context.fn(${args.toString()})`)

        delete context.fn

        return function() {
            that()
        }
    }
 

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门