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