当前位置:首页 > Web开发 > 正文

否则查看第3步;function Staff(name) {this.name = name;this.clog = f

2024-03-31 Web开发

标签:

一、this的意义 二、寻找this绑定东西

经常听到这么一句话,找this只需要看谁是挪用方。当函数被挪用时会记录函数挪用挪用方法、传参包孕this等各类属性。有时候this绑定东西情况太抽象,找到准确的挪用方还是有必然的难度。我罗列出小我私家寻找普通函数this的法式:

// 1. 通过函数挪用栈寻找其挪用位置; // 2. 判断函数是否时通过new绑定的。如果是,,则直接认定this指向新创建的东西。否则检察第3步; function Staff(name) { this.name = name; this.clog = function() { console.log('this.name', this.name); } } const Coder = new Staff('xiaobe'); // this指向Coder Coder.clog(); // 3. 判断函数是否使用了call、apply、bind等显式绑定要领。如果是,则指向传入绑定的东西。否则检察第4步; const Coder = { cname: 'xiaobe', // 全局存在name字段,为制止混淆,使用cname } function clog() { console.log('this.cname ==>', this.cname); } clog(); // this指向Window 打印undefined clog.call(Coder); // this指向Coder 打印xiaobe // 4. 判断函数是否被隐式(上下文)挪用,如果有,则指向上下文。否则检察第5步: const Coder = { cname: 'xiaobe', clog, } function clog() { console.log('this', this); console.log('this.cname', this.cname); } Coder.clog(); // 5. 如果上述情况都未呈现,则会呈现默认绑定。非严格模式下,指向Window。严格模式下指向undefined; function Coder(){ console.log('this', this); } Coder(); // 毋庸置疑,指向Window 三、找到挪用栈&挪用位置

看个例子: 分袂找到Staff、Coder、Skill的挪用栈挪用位置

function Staff() { StaffData.Coder(); } function Coder() { Skill(); } function Skill() { } Staff();

挪用栈:执行当前函数前所需要挪用的所有函数(所有感化域)的挨次,加上自身
挪用位置:当前函数在哪里被执行/挪用

挪用位置凡是在挪用栈的倒数第二个

通过以上观点我们很容易得出:

Staff: { 挪用栈: Staff 挪用位置: Window } Coder: { 挪用栈: Staff => Coder 挪用位置: Staff } Skill: { 挪用位置: Staff => Coder => Skill 挪用位置: Coder }

我们可以通过在函数里执行debugger可以检察到当前函数的挪用栈,例如

function Coder(){ debugger; // ... }

技术图片

四、箭头函数&全局要领

JS进阶(二):this绑定了谁?

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32215.html