有人可以解释一下:
0 hours
但:
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();
如我所见,jquery就像第一个代码示例一样工作,并返回finded DOM节点的数组。但是当我尝试返回数组时,我也有这个错误。
答案 0 :(得分:1)
如果从将返回的构造函数返回一个对象而不是new
创建的对象。如果您返回任何其他类型,则将忽略您的返回值,而是返回新对象。
jQuery不返回DOM元素数组。 The jQuery object is just array-like itself。它有一些数字属性,length
属性和splice
方法,只需要您能够访问obj[0]
之类的元素以及控制台将其记录为一个数组。
答案 1 :(得分:0)
这就是javascript的方式。在构造函数中,如果返回基本类型,则返回构造对象。简单地忽略原始值。如果它返回一个对象,则返回该对象。
例如
function ReturnsObject(){ return {}; }
function ReturnsPrimitive(){ return 5 // 'string'; }
console.log( new ReturnsObject()) // {}
console.log( new ReturnsPrimitive()) // ReturnsPrimitive{}