一、New
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。
我就直接上代码,加注释:
function Person (name, age) {
this.name = name;
this.age = age;
this.habit = 'Games';
}
Person.prototype.strength = 60;
Person.prototype.sayYourName = function () {
console.log('I am ' + this.name);
}
function myNew(fn, ...args) {
let obj = new Object() // 首先创建一个空的对象
let F=function(){};
F.prototype= fn.prototype;
obj=new F();//指向原型
let ret = fn.apply(obj, args) // 用fn这个构造函数,把其作用域指向obj对象,参数为args
//若构造函数fn返回的是引用类型,就返回ret;
//若构造函数fn返回的是基本类型,就返回obj;
return typeOf ret === 'object' ? ret : obj; //确保构造器总是返回一个对象
};
var person1 = myNew(Person, 'Kevin', '18')