Posted in Javascript onApril 07, 2013
最近在阅读《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'类型的
有关于JS辅助函数inherit()的问题
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@