new操作符具体做了什么
new操作符具体做了什么
1. 会创建一个新对象 : 返回对象
2. 原型赋值
3. 改变this指向
4. 判断构造函数最后返回的是什么类型
(如果是基本类型则无视,如果是引用类型则返回该对象,new不起作用了)
例子:
function Fun(){ Console.log(this) =指向window this.name = '张三'; } var obj = new Fun(); console.log( obj );Fun {name: '张三'} 对应第一点[会创建一个新对象]; 对应第三点,[改变this指向] console.log( obj.__proto__ ); console.log( Fun.prototype ); console.log( obj.__proto__ ===Fun.prototype ); true 对应第二点[原型赋值] ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function Fun(){ this.name = '张三'; return {a:1} 对应第四点:如果是引用类型则返回该对象,new不起作用了 return [1,2,3] 对应第四点:如果是引用类型则返回该对象,new不起作用了 return 111对应第四点:如果是基本类型则无视 } var obj = new Fun(); console.log( obj ); {a:1} [1,2,3] Fun {name: '张三'} console.log( obj.__proto__ ); constructor: ƒ Object() console.log( Fun.prototype ); constructor: ƒ Fun() console.log( obj.__proto__ ===Fun.prototype ); false true
New原理:
function Foo( name, age ){ this.name = name; this.age = age; return [1,2,3] } function crated( fn ,...arg){ //1. 创建对象 var obj = {}; //Object.create({}) //2. 原型赋值==> 把fn 的原型赋值给obj Object.setPrototypeOf( obj,fn.prototype ); //3. 改变this指向 var result = fn.apply( obj , arg ); //4. 判断构造函数最后返回的是什么类型 return result instanceof Object ? result : obj; } console.log( crated( Foo ,'张三',18) );
本文来自博客园,作者:杨建鑫,转载请注明原文链接:https://www.cnblogs.com/qd-lbxx/p/16258054.html

浙公网安备 33010602011771号