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


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'类型的

 

Javascript 相关文章推荐
javascript处理table表格的代码
Dec 06 Javascript
另一个javascript小测验(代码集合)
Jul 27 Javascript
js文件缓存之版本管理详解
Jul 05 Javascript
JQuery datepicker 用法详解
Dec 25 Javascript
javascript数据类型验证方法
Dec 31 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
Sep 19 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
vue中进行微博分享的实例讲解
Oct 14 Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 Javascript
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
运算符&&的三个不同层次
Apr 07 #Javascript
jquery实现excel导出的方法
Apr 04 #Javascript
关于jquery input textare 事件绑定及用法学习
Apr 03 #Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 #Javascript
让低版本浏览器支持input的placeholder属性(js方法)
Apr 03 #Javascript
用Jquery重写windows.alert方法实现思路
Apr 03 #Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 #Javascript
You might like
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python中模块string.py详解
2017/03/12 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
小结Python的反射机制
2020/09/28 Python
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
安全生产月宣传标语
2014/10/06 职场文书
小学教师党员承诺书
2015/04/27 职场文书
观后感开头
2015/06/19 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers
python绘制云雨图raincloud plot
2022/08/05 Python