有关于JS辅助函数inherit()的问题 |
本文标签: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类型的
|