前言

大家好 我是歌谣 上节课我们已经说过了关于手写apply和手写call的讲解 这节课我们继续来进行手写bind的讲解

bind演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>手写bind.html</title>
</head>
<body>
    <script>
         var geyao = {
            name: "geyao",
            show() {
                console.log(this, "this")
                console.log(` 我是${this.name}`)
            }
        }
        var fangfang = {
            name: "fangfang"
        }
        let fn=geyao.show.bind(fangfang)
        fn()
    </script>
</body>
</html>

运行结果

前端笔记之手写bind_笔记

分析

核心的功能就是第一会改变this的指向 第二函数不会立刻执行

代码

`` var geyao = { name: "geyao", show() { console.log(this, "this") console.log( 我是${this.name}`) } } var fangfang = { name: "fangfang" } Function.prototype.myBind = function (content, args) {

let fn = Symbol('geyao')
        fn = this
        return function Fn() {
            // 这里arguments的作用是拿到Fn中传入的参数
            return fn.call(content, args)
        }
    }
    let fn = geyao.show.myBind(fangfang)
    fn()

```

运行结果

前端笔记之手写bind_笔记_02

思考

这里还需要对new bind进行一个实现 不是上述所说的这么简单

function geyao() {
            this.fangfang = 'fangfang';
        }
        var geyaoFoo = geyao.bind();
        var obj = new geyaoFoo();
        console.log(obj.fangfang);

运行结果

前端笔记之手写bind_笔记_03

最终代码

```bash


手写bind2.html

```

运行结果

前端笔记之手写bind_笔记_04