new
new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對象類型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對象類型之一
function objectFactory() {
var obj = new Object(),
Constructor = [].shift.call(arguments);
obj.__proto__ = Constructor.prototype;
var ret = Constructor.apply(obj, arguments);
return typeof ret === 'object' ? ret : obj;
};
1贾费、用new Object() 的方式新建了一個(gè)對象 obj
2鳖谈、取出第一個(gè)參數(shù),就是我們要傳入的構(gòu)造函數(shù)侥衬。此外因?yàn)?shift 會修改原數(shù)組诵肛,所以 arguments 會被去除第一個(gè)參數(shù)
3、將 obj 的原型指向構(gòu)造函數(shù)箱蟆,這樣 obj 就可以訪問到構(gòu)造函數(shù)原型中的屬性
4沟绪、使用 apply,改變構(gòu)造函數(shù) this 的指向到新建的對象空猜,這樣 obj 就可以訪問到構(gòu)造函數(shù)中的屬性
5绽慈、返回 obj