new 操作符具體幹了什麼呢?如何實現?

阿裏雲問答 2022-01-07 12:07:20 阅读数:139

new 操作符 操作

new 操作符具體幹了什麼呢?如何實現?




采納答案1:

Javascript的new關鍵字主要的作用是繼承 new一共經曆4個階段 1、創建一個空對象 var obj = new Object(); 2、設置原型鏈

此時便建立了obj對象的原型鏈 obj.proto = Object.prototype; 3、讓Func的this指向obj,並執行Func函數體 Object.call(obj); 4、判斷Func(構造函數)的返回值類型 return typeof result === 'object'? result : obj;

構造函數默認return this,不用寫,如下 function A(){ this.name = x; // return this; }

如果構造函數return是基本數據類型: return 1 return "abc"

則return 後的東西忽略,就是return {}

如果是return的是引用類型: 則以return的內容為准 function A(){ this.name = x; // 無效
return {a: 1}; }




采納答案2:

// (1)首先創建了一個新的空對象 // (2)設置原型,將對象的原型設置為函數的 prototype 對象。 // (3)讓函數的 this 指向這個對象,執行構造函數的代碼(為這個新對象添加屬性) // (4)判斷函數的返回值類型,如果是值類型,返回創建的對象。如果是引用類型,就返回這個引用類型的對象。

// 實現:

function objectFactory() { let newObject = null, constructor = Array.prototype.shift.call(arguments), result = null;

// 參數判斷 if (typeof constructor !== "function") { console.error("type error"); return; }

// 新建一個空對象,對象的原型為構造函數的 prototype 對象 newObject = Object.create(constructor.prototype);

// 將 this 指向新建對象,並執行函數 result = constructor.apply(newObject, arguments);

// 判斷返回對象 let flag = result && (typeof result === "object" || typeof result === "function");

// 判斷返回結果 return flag ? result : newObject; }

// 使用方法 // objectFactory(構造函數, 初始化參數)


版权声明:本文为[阿裏雲問答]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071207203186.html