为了转生而点技能-JavaScript,day14(this下篇: Call、apply呼叫及bind

Call呼叫:呼叫函式的方法,并且能指定 this 值。

用法:函式名.call(指定的this变数(参数))。

        var myName = '真心镇大冒险';

        var family = {
            myName: '小明家',
        }

        function fn(para1, para2) {
            console.log(this, typeof this, para1, para2);
        }
        fn(1, 2);
        fn.call(family, 1, 2);

https://ithelp.ithome.com.tw/upload/images/20211205/20143762bZBO8brLKd.jpg

解:

  1. fn(1, 2):此时的this,属於一般呼叫(简易呼叫),所以变数会选择全域的变数。
  2. fn.call(family, 1, 2):可以指定this呼叫的变数。这边选择family。
let obj = {};

function foo() {
  console.log(this);
}

foo();          // "Window{}"
foo.call(obj);  // Object{}

apply呼叫:呼叫函式的方法,并且能指定 this 值。

用法:函式名.apply(指定的this变数[参数])。

        var myName = '真心镇大冒险';

        var family = {
            myName: '小明家',
        }
        function fn(para1, para2) {
            console.log(this, typeof this, para1, para2);
        }
        fn(1, 2);
        fn.apply(family, [3, 4]);

https://ithelp.ithome.com.tw/upload/images/20211205/20143762FfCszNWJnF.jpg

let obj = {};

function foo() {
  console.log(this);
}
foo();          // "Window{}"
foo.apply(obj); // Object{}
let obj = {};

function foo(a, b) {
  console.log(this, a, b);
}

foo.call(obj, 1, 2);    // Object{} 1 2
foo.apply(obj, [1, 2]); // Object{} 1 2

此模式被称为硬绑定(hard binding) 指的是绑定既明确又不会意外变回预设的绑定。


利用函式bind(),当被呼叫的时候,指定this值。

        var myName = '真心镇大冒险';

        var family = {
            myName: '小明家',
        }
        function fn(para1, para2) {
            console.log(this, typeof this, para1, para2);
        }
        fn(1, 2);
        var fn2 = fn.bind(family, '小明');
        fn2(1);

注意:此时的fn2(1)看起来会很像是简易呼叫!!但是本质不是

https://ithelp.ithome.com.tw/upload/images/20211205/20143762QCHA96kjGP.jpg



参考文章:
JavaScript 的 this:https://chupainotebook.blogspot.com/2019/09/javascript-this.html


<<:  React-使用useRef跨组件操作DOM

>>:  STM32开发笔记01---暂存器简介

第 12 天 小有成果保持练习( leetcode 043 )

https://leetcode.com/problems/multiply-strings/ M...

PM职称百百种,工作内容样样有

到底 PM 在做什麽? 以前还没有开始当产品经理前,因为对这个职位很有兴趣希望能够往这个职涯发展,...

Day 21 HTML5 <HTML5 多媒体标签>

多媒体标签可以很方便的在页面中嵌入音频和视频,而不用去使用flash和其他浏览器的插件,多媒体标签主...

爬虫怎麽爬 从零开始的爬虫自学 DAY14 python条件运算式

前言 各位早安,书接上回我们练习了条件判断语法 if else elif 的用法,今天我们要来介绍它...

#5 JavaScript in Browser

今天写一些浏览器跟 DOM 的东西。 DOM 全名是 Document Object Model,是...