2015-12-30 157 views
2

有人可以解釋我這樣的:不能使用原型構造函數返回的對象

var foo = function() { 
    if (!(this instanceof foo)) 
    return new foo(); 
    return {}; // Object 
}; 
foo.prototype.myPlugin = function() { // Uncaught TypeError: foo(...).myPlugin is not a function 
    alert("bar") 
}; 

foo().myPlugin(); 

但:

var foo = function() { 
    if (!(this instanceof foo)) 
    return new foo(); 
    return ""; // string, number, etc 
}; 
foo.prototype.myPlugin = function() { 
    alert("bar") // --> "bar" 
}; 

foo().myPlugin(); 

,因爲我看到,jQuery的工作方式類似於第一個代碼示例,並返回瑤池DOM節點陣列。但是,當我嘗試返回數組,我也有這個錯誤。

+1

jQuery?這裏沒有jQuery或Dom節點。我知道爲什麼第一個代碼塊會拋出錯誤,但我對第二塊代碼塊的目的感到困惑。 – Musa

回答

1

如果您將返回,而不是由new創建的對象的構造返回一個對象。如果你返回任何其他類型,你的返回值將被忽略,而新的對象將被返回。

jQuery不會返回DOM元素的數組。 The jQuery object is just array-like itself。它具有一些數字屬性,一個length屬性和一個splice方法,您只需要這些方法即可訪問像obj[0]這樣的元素,並使用控制檯將其像數組一樣記錄下來。

0

這是JavaScript的方式。在構造函數中,如果返回一個基元類型,它將返回構造的對象。只是原始值被忽略。如果它返回一個對象,它將返回該對象。

例如

function ReturnsObject(){ return {}; } 
function ReturnsPrimitive(){ return 5 // 'string'; } 
console.log(new ReturnsObject()) // {} 
console.log(new ReturnsPrimitive()) // ReturnsPrimitive{} 
相關問題