有关于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 相关文章推荐
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
js键盘事件的keyCode
Jul 29 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 Javascript
基于jquery实现智能表单验证操作
May 09 Javascript
从零学习node.js之文件操作(三)
Feb 21 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
Jun 29 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
Jul 27 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
Aug 09 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 Javascript
vue实例的选项总结
Jun 09 Javascript
运算符&&的三个不同层次
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实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python语法快速入门指南
2015/10/12 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python实现淘宝购物系统
2019/10/25 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python list运算操作代码实例解析
2020/01/20 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
华为的Java面试题
2014/03/07 面试题
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
代理班主任的自我评价
2014/02/04 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
委托书怎样写
2014/08/30 职场文书
就业意向协议书
2015/01/29 职场文书
销售内勤岗位职责
2015/02/10 职场文书