有三个你须要知道的与this相干的陷阱。请留意,在各类情况下,严格模式更安然,因为this在通俗函数中为undefined,并且会在出现问题时警告。
陷阱:忘记new操作符
如不雅你调用一个构造函数时忘记了new操作符,那么你不测埠将this用在一个通俗的函数。this会没有精确的值。 在非严格模式下,this指向window对象,你将创建全局变量:
- function Point(x, y) {
- this.x = x;
- this.y = y;
- }
- var p = Point(7, 5); // 忘记new!
- console.log(p === undefined); // true
- // 创建了全局变量:
- console.log(x); // 7
- console.log(y); // 5
- 荣幸的是,在严格模式下会获得警告(this === undefined):
- function Point(x, y) {
- 'use strict';
- this.x = x;
- this.y = y;
- }
- var p = Point(7, 5);
- // TypeError: Cannot set property 'x' of undefined
陷阱:不精确地提取办法
如不雅获取办法的值(不是调用它),则可以将该办法转换为函数。 调用该值将导致函数调用,而不是办法调用。 当将办法作为函数或办法调用的参数传递时,可能会产生这种提取。 实际例子包含setTimeout()和事宜注册处理法度榜样。 我将应用函数callItt() 来模仿此用例:
- /**类似setTimeout() 和 setImmediate() */
- function callIt(func) {
- func();
- }
如不雅在非严格模式下把一个办法作为函数来调用,那么this将指向全局对象并创建全局变量:
- var counter = {
推荐阅读
有奖调研 | 人脸辨认功能在互联网行业认知度情况经由过程应用法度榜样级其余感知和洞察,为微办事带来编排和主动化的优势 微软的 Azure Service Fabric 的官方博客在2017.3.2>>>详细阅读
本文标题:JavaScript中this的运行机制及爬坑指南
地址:http://www.17bianji.com/lsqh/40750.html
1/2 1