new 构造函数是怎么生成对象的
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex= sex;
}
var person1 = new Person("小红",12,"nv");
构造函数能构造出函数的前提的是 new 。加new 构造函数是怎么生成对象的呢
即构造函数的内部原理是什么
当遇到new 关键字的时候
Person()函数内部会隐式的执行3步
函数的引用后面加()就是执行的意思,所以 new Person("小红",12,"nv");也是执行了这个函数,不过因为有new。所以在执行的时候会执行一些隐式的操作
function Person(name,age,sex){
1: 第一步创建一个this空对象 var this ={}
2: 给这个this对象进行赋值
{
name:"小红",
age:12,
sex:'nv'
}
3: return this 隐式的返回这个this
this.name = name;
this.age = age;
this.sex= sex;
}
捣乱
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex= sex;
return {} 显式的返回一个空对象
}
var person1 = new Person("小红",12,"nv");
console.log(person1) 输出的是{}
返回引用对象会干扰 构造函数
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex= sex;
return 123 显式的返回一个原始值
}
var person1 = new Person("小红",12,"nv");
console.log(person1) 输出的是就是该对象
person1 {name: "小红", age: 12, sex: "nv"}
返回原始值不会干扰 构造函数
** 结论:有new关键字,就不会返回原始值 **