模拟js的new运算符的实现原理函数
咱们知道,js里有一种建立对象的方式是经过显式的构造函数new出来一个实例化对象
可是 这个new运算符是怎么实现的呢?this
先捋一遍new运算符的整个流程: 1: 建立一个新对象 它继承自构造函数的prototype 2:构造函数被执行 执行的时候 相应的传参会被传入,同时绑定上下文(this) 3:若是构造函数返回了一个'对象' 那么这个对象会取代整个new出来的结果。若是构造函数 没有返回对象,那么new出来的结果为步骤1建立的新对象
<script> function Tiger(){ this.name='泰哥'; this.work='eat meat'; } Tiger.prototype.tiger_dance = function(){ console.log('dancing~~~~~~!'); } var tigers = new Tiger(); console.log(tigers); </script>
![图片描述][1]
接下来就手动实现一个new运算符:prototype
<script> var new2 = function(func){ //建立一个空对象 并继承构造函数的原型对象 var o = Object.create(func.prototype); //执行构造函数func 并改变func的this为o对象的 var k = func.call(o); //判断构造函数func执行完的结果是否是对象类型 if(typeof k === 'object'){ return k; }else{ return o; } } function Funky(){ this.name='泰哥'; this.work='eat meat'; } Funky.prototype.funky_dance = function(){ console.log('dancing~~~~~~!'); } var funkys = new2(Funky); console.log(funkys); </script>
![图片描述][2] 能够看到 Funky的实例化对象funkys 已经有了构造函数Funky自己的属性而且也继承了Funky原型链上的方法 而且 funkys.__proto__ === Funky.prototype 至此,咱们已经简单的实现了new运算的功能 是否是蛮简单~