有关于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 prototype截取字符串函数
Apr 01 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
Feb 07 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
javascript实现标签切换代码示例
May 22 Javascript
微信小程序 富文本转文本实例详解
Oct 24 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
详解Vue路由钩子及应用场景(小结)
Nov 07 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 Javascript
es6数组之扩展运算符操作实例分析
Apr 25 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
ThinkPHP3.1查询语言详解
2014/06/19 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
PHP中header用法小结
2016/05/23 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
python操作gmail实例
2015/01/14 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
python获取Pandas列名的几种方法
2019/08/07 Python
python是否适合网页编程详解
2019/10/04 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
九年级历史教学反思
2014/01/27 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
政府采购方案
2014/06/12 职场文书
异地年检委托书范本
2014/09/24 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
学校党员干部承诺书
2015/05/04 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书