有关于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 相关文章推荐
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
Dec 02 Javascript
Jquery中删除元素的实现代码
Dec 29 Javascript
jQuery动态添加、删除元素的方法
Jan 09 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
JS循环遍历JSON数据的方法
Jul 08 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
微信小程序 弹幕功能简单实例
Feb 14 Javascript
angular框架实现全选与单选chekbox的自定义
Jul 06 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
从0到1构建vueSSR项目之路由的构建
Mar 07 Javascript
如何通过javaScript去除字符串两端的空白字符
Feb 06 Javascript
微信小程序后端实现授权登录
Feb 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把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
极简的Python入门指引
2015/04/01 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
简单了解Django模板的使用
2017/12/20 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
python单例模式实例解析
2018/08/28 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
python and or用法详解
2019/06/26 Python
pymysql的简单封装代码实例
2020/01/08 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
小学教师师德承诺书
2014/05/23 职场文书
装配出错检讨书
2014/09/23 职场文书
学术会议邀请函
2015/01/30 职场文书