大家好!
要写到今天也真是不容易呢!明天就要从 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
指向的会是物件:
(这是第一天的小测验,还记得吗?)
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 25) Detecting Concurrent Writes Dynamo-st...
在前面我们已经稍微了解如何把资料抓取到Elasticsearch,但是单纯用api来查询资料,对使用...
Colab连结 要来讨论今天主题前,先来复习一下什麽是交叉熵 Cross-Entropy ,我觉得这...
PHP判断式 break break 结束当前 for,foreach,while,do-while...
终於到最後一个区域了,我有加一些新的东西在上面这边一起跟大家说 一样先到assets资料夹下的Foo...