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)