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;
}
因此我看不到窗口对象吗?有人可以对此进行解释和帮助吗?
谢谢
答案 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
。