关于'new'关键字的Javascript原型问题

关于'new'关键字的Javascript原型问题,javascript,Javascript,问题: 如果我同时运行这两个函数,第一个函数(A)将返回: 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 =

问题:

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

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
但是当我运行函数(B)时,它返回
window
object

新的关键字在做这件事吗

Person {firstName: undefined, lastName: undefined, age: undefined, eyeColor: undefined}
因此我看不到窗口对象?请有人解释一下,并在这方面提供帮助


谢谢

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


您可以在此处阅读有关新运算符的更多信息:

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


您可以在此处阅读有关新运算符的更多信息:

当您调用函数时
引用调用者。在代码中,调用者是
windows
对象。另一方面,当您使用
new
关键字时,将创建一个新对象并
将它的原型设置为master,表示调用函数时
对象
引用调用方。在代码中,调用者是
windows
对象。另一方面,当您使用
new
关键字时,将创建一个新对象并
将它的原型设置为master,意味着
object

Uuh,您将编程语言(Javascript)与环境(浏览器)混为一谈。您也可以在非浏览器环境中运行JS。场景A是预期的,您没有传递任何ctor参数,因此所有内容都为零。语句B只是对ctor进行函数引用,实际上并没有调用它。是的,
new
创建了一个对象的实例,而该对象正是
指向函数内部的对象。如果你不使用
new
你只是在运行一个函数和所有确定
这个
引用什么的常规规则。Uuh,你把编程语言(Javascript)和环境(浏览器)混为一谈了。您也可以在非浏览器环境中运行JS。场景A是预期的,您没有传递任何ctor参数,因此所有内容都为零。语句B只是对ctor进行函数引用,实际上并没有调用它。是的,
new
创建了一个对象的实例,而该对象正是
指向函数内部的对象。如果您不使用
new
,那么您只是在运行一个函数,并且所有确定
所指内容的常规规则都适用。
function Person(first, last, age, eyecolor) {
    this = Object.assign(Person);
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    return this;
}