2015-12-30 151 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{} 
相关问题