zoukankan      html  css  js  c++  java
  • 在构造函数中使用严格模式,并直接调用构造函数

    1 function Fubar(foo, bar){
    2   'use strict';
    3   this._foo = foo;
    4   this._bar = bar;
    5 }
    6 
    7 Fubar()
    8 // TypeError: Cannot set property '_foo' of undefined

    如果没有严格模式,构造函数中的this指向全局对象;

    有严格模式时,this默认为undefined而不是指向全局对象;

    如果此时直接调用构造函数,语句 this.-foo=foo; 相当于为“undefined”添加属性,所以会报错。

     1 function Fubar(foo, bar) {
     2   if (!(this instanceof Fubar)) {
     3     return new Fubar(foo, bar);
     4   }
     5 
     6   this._foo = foo;
     7   this._bar = bar;
     8 }
     9 
    10 Fubar(1, 2)._foo // 1
    11 (new Fubar(1, 2))._foo // 1

    目的:没有使用new来调用构造函数时,返回一个用new创建的构造函数实例。

    过程:

    this是否指向构造函数实例?

    上述句子等同于:是否使用了new?

    是,对true取反后为假,则不执行if内的语句;

    否,对false取反后为真,执行if内语句。

    结果是未使用new时,执行if内的语句。

  • 相关阅读:
    康托(逆)展开(2015.8.6)
    高精度计算(2015.8.1)
    笔记(2015.8.1)
    筛法求素数(2015.7.30)
    欧几里德算法(2015.7.28)
    快速幂取模(2015.7.29)
    同余
    图论相关算法
    笔记(2015-07-24)
    ACM进阶计划
  • 原文地址:https://www.cnblogs.com/flyover/p/14325366.html
Copyright © 2011-2022 走看看