一、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')