JS 15 - this 关键字

大家好!

要写到今天也真是不容易呢!明天就要从 50% 开始了!
我们进入今天的主题吧!


严谨模式

当我们直接呼叫 this 时,this 会指向 window

this; // window

但是,当 this 是在函式内被呼叫的话,会有这样的情况:

(function () {
    return this; // window
})();

(function () {
    'use strict';
    return this; // undefined
})();

没错,不能小看 'use strict' 这组字串,这是 ES5 加入的「严谨模式」。
严谨模式下,函式内的语法都会被严谨地检查,一旦不合常理就会回传错误。
例如,对被冻结的物件新增属性,一般模式下只会默不作声,严谨模式下则会回传错误:

let obj = {};
Object.freeze(obj);

(function () {
    obj.one = 1; // 1
})();

(function () {
    'use strict';
    obj.one = 1; // Uncaught TypeError: Cannot add property one, object is not extensible
})();

严谨模式的确能改善编写程序的错误或坏习惯,但是对於不支援 ES5 的浏览器来说,'use strict' 就只是一组字串,没有任何意义,因此建议仅在开发环境下使用严谨模式就好。


this

上方我们提到 this 在函式内被呼叫的情况。
但是,当函式作为物件的属性时,函式内的 this 指向的会是物件:

(这是第一天的小测验,还记得吗?)

var obj = {
    kw: this,
    fn: function () {
        return this;
    }
};

obj.kw; // window
obj.fn(); // obj

这也是为什麽,建构函式和原型方法的 this 指向的都是新的物件:

/* 因为 finish 算是 record 的属性 */
let record = new Ironman('Felix', '2021-09-30', 15);
record.finish(); /* 不执行 */

差不多也到尾声了,接下来我们要开始打造函式库了。
如果对文章有任何疑问,也欢迎在下方提问和建议!
我是 Felix,我们明天再见!


<<:  我们的基因体时代-AI, Data和生物资讯 Day30-以终为始

>>:  Day 15:Git

Day06 Kibana - Discover Search

在前面我们已经稍微了解如何把资料抓取到Elasticsearch,但是单纯用api来查询资料,对使用...

【10】多分类问题下 Sparse Cross Entropy 与 Categorical Cross Entropy 的用法差异

Colab连结 要来讨论今天主题前,先来复习一下什麽是交叉熵 Cross-Entropy ,我觉得这...

[Day9]PHP判断式02

PHP判断式 break break 结束当前 for,foreach,while,do-while...

Flutter基础介绍与实作-Day25 旅游笔记的实作(6)

终於到最後一个区域了,我有加一些新的东西在上面这边一起跟大家说 一样先到assets资料夹下的Foo...