【使用callapplybind继承及三者区别】别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述使用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。
推荐阅读
- Android软件安全与逆向分析 pdf 电子书
- Power Apps 随笔
- Android Studio 配置文件路径修改
- Unity Remote 5 安卓真机测试
- appium inspector抓取元素录制脚本
- FlutterApp启动页及设置背景颜色
- create-react-app脚手架使用scss(转)
- Androidstudio生成api文档
- AppScan解决打开配置,提示“发生内部错误问题”