在使用new运算符的时候,系统会为你做一些事,首先:他会先创建一个空对象,然后调用这个构造函数,在此过程中空对象处于作用域链的最前端(作用域链的前端就是当前代码执行所在环境对应的变量对象即空对象)
function Person(name , age){
this.name = name;
this.age = age;
console.log(this); // Person {name: "neo", age: "23"}
//return this; 默认隐藏
}
var p1 = new Person('neo','10');
console.log(p1.name);
等同于:
function Person(name , age){
this.name = name;
this.age = age;
console.log(this); //window
return this;
}
var p1 = new Object(); //var p1 = {}
p1 = Person('neo','23');
console.log(p1.name);new 关键字做了什么
在 JavaScript 中,使用 new 关键字后,意味着做了如下四件事情:
创建一个新的对象,这个对象的类型是 object;
设置这个新的对象的内部、可访问性和[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;
执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性; 返回新创建的对象(除非构造方法中返回的是‘无原型’)。
在创建新对象成功之后,如果调用一个新对象没有的属性的时候,JavaScript 会延原型链向止逐层查找对应的内容。这类似于传统的‘类继承’。
注意:在第二点中所说的有关[[prototype]]属性,只有在一个对象被创建的时候起作用,比如使用 new 关键字、使用 Object.create 、基于字面意义的(函数默认为 Function.prototype ,数字默认为 Number.prototype 等)。它只能被Object.getPrototypeOf(someObject) 所读取。没有其他任何方式来设置或读取这个值。

版权声明:本文为qq_27449993原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。