如果构造函数返回对象,则无法使用原型

时间:2015-12-30 14:46:07

标签: javascript

有人可以解释一下:

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节点的数组。但是当我尝试返回数组时,我也有这个错误。

2 个答案:

答案 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{}