美文网首页
apply,call,bind

apply,call,bind

作者: 神话降临 | 来源:发表于2019-02-19 08:48 被阅读0次

前言

初学js的时候我们肯定都被这三个关键字困扰过,之前也零零散散的总结过一些,但是都不成体系,实际写项目的时候用的又不多(用的框架,原生用的少),以至于知识点容易忘记,而且老用框架,而不去深究原理,始终浮于表面对成长不利,所以决定系统的整理一下,以便温习

定个基调

为apply,call存在的意义定个基调

call 和 apply 是为了改变某个函数运行时的上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。
call和apply可以达到继承的效果

JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。

改变this指向

理解一下下面代码,就是obj1的执行上下文被替换成obj的执行上下文,这个时候this从指向obj1,改成指向obj

   let obj  = {
        name: "laowu",
    
    }

    let obj1 = {
        name: 'laowan',
        fn: function () {
            console.log(this.name)
        }
    }

   obj1.fn.call(obj)  // laowu
对象继承,劫持别人的方法

理解一下下面的代码,Animal是父类型构造,Cat是子,cat里面本生是没有say方法的,但是通过call方法劫持了Animal的say方法,Animal的this会改变指向,指向Cat new出来的对象

    function Animal(name){
        this.say = function () {
            console.log(name)
        }
    }

    function Cat(name) {
        Animal.call(this,name)
        this.say()
    }

   let cat = new Cat("i am cat") //i am cat

相关文章

网友评论

      本文标题:apply,call,bind

      本文链接:https://www.haomeiwen.com/subject/mudszftx.html