javascript一天一练01理解new的运行机制

1.new的原理


   function People(name,age) {
     this.name = name;
     this.age=age;
    }
    People.prototype.sayName = function () {
      console.log(this.name);
    }
 
    var man1 = new People('Lise',18);
    console.log(man1.name)
    man1.sayName();
  1. 创建一个空对象
    var obj={}
  2. 让Person中的this指向obj,并执行Person的函数体
    var result=Person.apply(obj,arguments)
  3. 设置原型链,将obj的proto成员指向了Person函数对象的prototype成员对象
    obj.__proto__ = Person.prototype;
  4. 判断Person的返回值类型,如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。
    if (typeof(result) == "object") person = result; else person = obj;

2.设计函数实现原生new

function New () {
  let obj = new Object();
  let fn = [].shift.call(arguments);
  let args = arguments;
  var ret = fn.apply(obj, args);
  obj.__proto__ = fn.prototype;
  return typeof ret === 'object' ? ret : obj;
}

let person = New(Person, 'Bob', 23);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容