意外丢失 new 会怎么样子。

var Person = function () {
    this.age = 18;
}
var p1 = Person();
p1; // undefined
age; // 18

怎么防止意外的丢掉 new ,而带来的现象?

1. 通过使用严格模式,函数内部 this 不能指向全局对象,undefined 不能添加属性。
function Person(name, age) {
    'use strict';
    this.name = name;
    this.age = age;
}
Person; // TypeError

2. 在构造函数内部判断是否使用了 new 命令。
function Person(name, age) {
    if ( !(this instanceof Person )) {
        return new Person(name, age);
    }
    this.name = name;
    this.age = age;
}

3. 使用 new.target 来判断. 函数通过 new 调用,new.target 指向当前函数,否则为 undefined.
function Person(name, age) {
    if ( !new.target ) {
        return new Person(name, age);
    }
    this.name = name;
    this.age = age;
}



`