“ new”关键字上的Javascript原型问题

时间:2018-10-06 01:29:57

标签: javascript

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    console.log(this)
}

const test = new Person(); //A
const test1 = Person(); //B

问题:

如果我同时运行两个函数,则第一个函数(A)将返回:

Person {firstName: undefined, lastName: undefined, age: undefined, eyeColor: undefined}

但是当我运行函数(B)时,它会返回window对象

新关键字是这样做的吗?

function Person(first, last, age, eyecolor) {
    this = Object.assign(Person);
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    return this;
}

因此我看不到窗口对象吗?有人可以对此进行解释和帮助吗?

谢谢

2 个答案:

答案 0 :(得分:1)

是的,这是大致正确的。 new关键字创建一个新对象,将Person.prototype设置为该对象的原型,然后调用this等于新创建的对象的Person。如果您的函数未显式返回任何内容,则将隐式返回新创建的对象(这通常是构造函数要执行的操作,因此我建议省略return语句)。

您可以在此处了解有关新运算符的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

答案 1 :(得分:1)

当您调用函数this时,请参考调用者。在您的代码调用者中,是windows对象。另一方面,当您使用new关键字时,这将创建一个新对象并  将其原型设置为等于master,即object