js new操作符
new操作符的执行过程:
-
在内存中创建一个对象
-
这个新对象内部的
[[prototype]]特性被赋值为构造函数的prototype属性(所以创建的对象会具有构造函数原型上的属性与方法) -
构造函数内部的
this被赋值为这个新对象,即让this指向新对象。(所以构造函数中的this指向的是实例对象) -
执行构造函数内部的代码(给新对象添加属性)
-
如果构造函数返回非空对象,则返回该对象,否则返回刚创建的新对象
function Person(name,age){ this.name = name this.age = age this.sayName = function(){ console.log(this.name); } // new操作符调用时任然返回实例对象,作为普通函数调用时才会返回这句"你猜返回了什么" // return "你猜返回了什么" //返回空对象时,new操作符调用这个构造函数返回的居然是个空对象,也就是下面的person1和person2都是{}???这与红宝书上面的描述不符(如有错误,望指正) return {} } const person1 = new Person('张三',18) const person2 = new Person('李四',19) console.log(person1);