我試圖理解Mozilla在構造函數鏈上的一些代碼。我已經爲我認爲理解的部分添加了評論,但我仍然不清楚所發生的一切。有人可以一行一行地解釋這段代碼是怎麼回事?JavaScript函數構造函數鏈接使用apply()函數
// Using apply() to chain constructors.
Function.prototype.construct = function (aArgs) {
// What is this line of code doing?
var fConstructor = this, fNewConstr = function() { fConstructor.apply(this, aArgs); };
// Assign the function prototype to the new function constructor's prototype.
fNewConstr.prototype = fConstructor.prototype;
// Return the new function constructor.
return new fNewConstr();
};
// Example usage.
function MyConstructor() {
// Iterate through the arguments passed into the constructor and add them as properties.
for (var nProp = 0; nProp < arguments.length; nProp++) {
this["property" + nProp] = arguments[nProp];
}
}
var myArray = [4, "Hello world!", false];
var myInstance = MyConstructor.construct(myArray);
// alerts "Hello world!"
alert(myInstance.property1);
// alerts "true"
alert(myInstance instanceof MyConstructor);
// alerts "MyConstructor"
alert(myInstance.constructor);
The original code can be found here.
感謝您的詳細解答。這就說得通了。你會用什麼樣的場景來進行這種類型的構造器操作? – Halcyon
你會爲任何類型的OO繼承情況使用類似的東西。假設你有一個創建Animal對象的構造函數,並且你想擴展Animal構造函數來創建一個Dog構造函數。您可能想要在Dog構造函數中執行特定於Dog對象的一些任務,但您仍然想將原始Animal構造函數應用於該對象。這種模式可以讓你做到這一點。 –
這看起來非常類似於c#實例構造函數。 – Halcyon