使用callapplybind继承及三者区别

Posted Sofiaღ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用callapplybind继承及三者区别相关的知识,希望对你有一定的参考价值。

js里的继承方法有很多,比如:使用原型链的组合继承、es6的Class、寄生继承以及使用call、apply、bind继承。再说继承之前,我们先简单了解下它们的区别。

一、区别:

同:三者都是改变函数执行时的上下文,说人话就是改变this的指向。

异:

1、bind()返回的其实是一个函数,并不会立即执行。

2、call()、apply()第二个参数有区别,call()的是一个值作为第二个参数,apply()的第二个参数则是一个数组:

        let obj = {
            name: ‘jack‘
        }

        function People(name) {
            this.name = name;
        }

        People.prototype = {
            sayHi(name) {
                console.log(`Hi,${name}~`)
            }
        }

        let child = new People(‘rose‘);

         child.sayHi.call(obj, ‘Sofia‘);
         child.sayHi.apply(obj, [‘Sofia‘]);

         let bind = child.sayHi.bind(obj, ‘Sofia‘);
         bind();

 

二、继承

        let obj = {
            name: ‘Sofia‘
        }

        function People(name) {
            this.name = name;
        }

        People.prototype = {
            sayHi() {
           console.log(`Hi Jack,I am ${this.name}~`)
            }
        }  

obj对象没有声明sayHi的方法,但是obj就是想跟帅哥杰克sayHi,并且告诉杰克她的芳名,但又不想声明sayHi方法,可不可以白嫖People这个构造函数里面的?当然可以。

        let child = new People(‘rose‘);

        child.sayHi.call(obj);
        child.sayHi.apply(obj);

        let bind = child.sayHi.bind(obj);
        bind();    

调用child的sayHi,并且改变它的this的指向为obj。

以上是关于使用callapplybind继承及三者区别的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的callapplybind是怎么回事?

245 改变函数内部 this 指向:call,apply,bind,callapplybind 三者的异同

理解JS中的callapplybind方法

理解JS中的callapplybind方法

理解JS中的callapplybind方法()

前端面试基本---this 指向(callapplybind用法及区别详解)