有关于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 相关文章推荐
js事件(Event)知识整理
Oct 11 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 Javascript
js实现动态创建的元素绑定事件
Jul 19 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
socket.io实现在线群聊功能
Apr 07 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 Javascript
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
点击按钮弹出模态框的一系列操作代码实例
Mar 29 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python中的类与类型示例详解
2019/07/10 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
专升本个人自我评价
2013/12/22 职场文书
库房管理员岗位职责
2014/03/09 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
廉洁自律个人总结
2015/02/14 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书