有关于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 相关文章推荐
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
Mar 09 Javascript
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
关于js遍历表格的实例
Jul 10 Javascript
window.navigate 与 window.location.href 的使用区别介绍
Sep 21 Javascript
利用Javascript实现BMI计算器
Aug 16 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
对vue 键盘回车事件的实例讲解
Aug 25 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 Javascript
ionic使用angularjs表单验证(模板验证)
Dec 12 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 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 存取 MySQL 数据库的一个例子
2006/10/09 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
Electron vue的使用教程图文详解
2019/07/05 Javascript
原生js实现随机点名
2020/07/05 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
python脚本定时发送邮件
2020/12/22 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
旅游管理毕业生自荐信
2013/11/05 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
销售经理岗位职责
2014/03/16 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
小学亲子活动总结
2014/07/01 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL