js手写—实现new

实现思路

  • 创建一个空的简单Javascript对象 (即{});
  • 链接该对象(即设置该对象的构造函数)到另一个对象;
  • 将步骤1新创建的对象作为this的上下文;
  • 如果该函数没有返回对象,则返回this;

/**
 * @bug 这里假设new出来实例的都是object,不是array对象
 * @description 传入构造函数,以及构造函数参数,模拟构造函数返回一个新建实例
 * @param {function} constructor 需要传入的构造函数
 * @param {any} params 跟在constructor参数后面的所有参数,用来模拟传入constructor的参数
 * @returns 返回一个新的对象
*/
function newFn(constructor){
  var obj={}
  obj.__proto__=constructor.prototype
  var params=Array.prototype.splice.call(arguments,1);
  constructor.apply(obj,params);
  return obj
}

function Person(name,age){
  this.name=name;
  this.age=age
}
let Cat={
  name:"",
  age:""
}
let person=newFn(Person,"Florenza",20)
console.log(person)
console.log(person instanceof Person)
// console.log(cat)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值