function Demo() {
this.init=function () {
console.log('111')
}
}
var demo=new Demo()
console.log(demo.init())//111
new Demo()等价:
var demo={};
demo.__proto__=Demo.prototype;
Demo.call(demo);
console.log(demo.init())
new实例的过程相当于
1.创建一个对象
2.新生成的对象的proto属性赋值为构造函数的prototype属性,使得通过构造函数创建的所有对象可以共享相同的原型
3.修改Demo原型的this指向为demo
那么就可以进行demo.init()方法
demo的原型链是:demo->Demo.prototype->Object.prototype->null
在Javascript中, 通过new可以产生原对象的一个实例对象,而这个实例对象继承了原对象的属性和方法。因此,new存在的意义在于它实现了Javascript中的继承,而不仅仅是实例化了一个对象!