前端面试题之[new一个对象的过程]

2,093 阅读1分钟

new一个对象的原理是怎样的呢?

1.首先用Object.creat()创建一个空对象obj; 2.去除第一个参数,也就是我们传入的构造函数,理由shift方法修改原数组,所以 arguments 会被去除第一个参数; 3.将obj的_proto_指向构造函数的prototype,这样obj就能访问到构造函数原型上的属性方法; 4.将构造函数的this用call或apply方法指向obj,让obj拥有函数内部属性方法; 5.返回obj;

实现过程:

function Foo(name,age){
   this.name = name;
   this.age = age;
   this.getName = function(){
     return this.name;
   }
   this.getAge = function(){
     return this.age;
   }
}

function newObj(classname){
    let obj=Object.create({})
    let agu=Array.prototype.slice.call(arguments,1)
    obj._proto_=classname.prototype;
    classname.apply(obj,agu);
    return obj;
}


let cc=newObj(Foo,'hh',12)
console.log(cc)