有关于JS辅助函数inherit()的问题

  最近在阅读《JavaScript权威指南》(第六版)在第六章P122有这么一段代码:

  

复制代码 代码如下:

  // 返回一个继承自原型对象proto的属性的新对象

  // 这里可以用到ES5的Object.create()函数

  function inherit(proto) {

  //proto是一个对象,但不能是null

  if(proto == null) throw TypeError();

  if(Object.create) return Object.create(proto); //如果Object.create()存在,使用它

  var t = typeof proto; //否则进一步检查

  if(t!=='object' && t!=='function') throw TypeError();

  var F = function() {}; // 定义一个空构造函数

  F.prototype = proto; // 将其原型属性设置为proto

  return new F(); // 使用F()创建proto的继承对象

  }

  很明显辅助函数的用途是创建一个继承父类原型的新对象

问题

  在关于下面的这句判断时,一时无法理解

  

复制代码 代码如下:

  var t = typeof proto; //否则进一步检查

  if(t!=='object' && t!=='function') throw TypeError();

  我们的印象中原型对象应该是个Object或者直接是字面量,那么传递的参数类型会有“function”类型情况吗

理解

  函数也是对象,也可以有自己的属性和方法。等等,这不是我们的静态属性和方法啊!这里是指把函数看成可以添加属性的对象

  

复制代码 代码如下:

  // 测试传递function类型

  var func = function() {};

  func.text = 'good work';

  func.getText = function() {

  return func.text;

  };

  console.log(typeof func); // 'function'

  // 传递function类型,返回以func为原型的新对象

  var subFunc = inherit(func);

  console.log(subFunc.getText()); // 输出:'good work'

  好吧,一个证明说明。原来是可以传递'function'类型的