js中new的本质
var obj = new Object();创建一个新对象obj.__proto__ = fn.prototype;将创建新对象中的__proto__(隐式原型)指向原函数中的prototype(显示原型),fn.call(obj);将原函数中的this,指向创建好的这个新对象- 判断原函数是否主动返回对象,如果没有那么new出来的就是这个新对象(1,2,3步骤创建的)
demo-1
new 一个对象
function fn() { }
var obj = new fn(); function fn(name) {this.name = name }
var obj = new fn('rrr');替换实现new
function fn() { }
// var obj = new Object();
var obj = Object.create();
obj.__proto__ = fn.prototype;
fn.call(obj); function fn() { }
var obj = new Object();
obj.__proto__ = fn.prototype;
fn.call(obj);以上代码在浏览器中运行如下 
demo-2
new 一个对象
function fn(name) {this.name = name }
var obj = new fn('rrr');替换实现new
function fn(name) {this.name = name }
var obj = new Object();
obj.__proto__ = fn.prototype;
fn.call(obj, 'rrr');以上代码在浏览器中运行如下 
