// ES6 提供了一个特殊的API,可以使用该API在函数内部,判断该函数是否使用了 new 来调用
/*
```js
new.target
// 该表达式,得到的是: 如果没有使用 new 来调用函数,则返回 undefined
// 如果使用 new 调用函数,则得到的是 new 关键子后面的函数本身
```
*/

function Person(firstName, lastName) {
    // 判断是否是使用 new 的方式来调用的函数

    // // 过去的判断方式
    // if (!(this instanceof Person)) {
    //     throw new Error("该函数没有使用new来调用");
    // }
     
    // console.log(new.target);
    if(new.target === undefined){
        throw new Error("该函数没有使用new来调用");
    }

    this.firstName = firstName;
    this.lastName = lastName;
    this.fullName = `${firstName} ${lastName}`;
}

const p1 = new Person("hello", "world");
console.log(p1);

// const p2 = Person("hello", "javaScript");
// console.log(p2);

const p3 = Person.call(new Person(), 'hello', 'js');  // 此方式会绕开 this instanceof Person 判断
// console.log(p3);