为了转生而点技能-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);

http://img2.58codes.com/2024/20143762bZBO8brLKd.jpg

解:

fn(1, 2):此时的this,属于一般呼叫(简易呼叫),所以变数会选择全域的变数。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]);

http://img2.58codes.com/2024/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 2foo.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)看起来会很像是简易呼叫!!但是本质不是

http://img2.58codes.com/2024/20143762QCHA96kjGP.jpg



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


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章