先看普通的构造函数
function Person(name,age) {
this.name=name;
this.age=age;
}
其实在new的过程中内部实现了隐式创建对象
function Person(name,age) {
//this={};隐式执行让this等于一个对象
this.name=name;
this.age=age;
//return this 隐式返回了this
}
new Person;
下面来写一个函数来实现new的作用
function Animal(name,sex) {
this.name=name;
this.sex=sex;
}
Animal.prototype.call=function (){
console.log('I am a '+this.name+',and I am a '+this.sex)
}
function create() {
// 创建⼀个空的对象
let obj = new Object()
// 获得构造函数
let Con = [].shift.call(arguments)
// 链接到原型
//obj.__proto__ = Con.prototype
//采用Object.creact()方法创建原型链
const obj = Object.creact(Con)
// 绑定 this,执⾏构造函数
let result = Con.apply(obj, arguments)
// 确保 new 出来的是个对象 如果构造函数返回对象就是生成这个对象,否则返回obj
return typeof result === 'object' ? result : obj
}
const obj1=create(Animal,'老虎','male');
const obj2=create(Animal,'狐狸','female');