有关于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模仿jquery的写法示例代码
Jun 16 Javascript
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
js 限制input只能输入数字、字母和汉字等等
Dec 18 Javascript
jQuery 复合选择器应用的几个例子
Sep 11 Javascript
AngularJS API之copy深拷贝详解及实例
Sep 14 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
详解jQuery事件
Jan 13 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
vue多页面开发和打包正确处理方法
Apr 20 Javascript
javascript执行上下文、变量对象实例分析
Apr 25 Javascript
搭建vscode+vue环境的详细教程
Aug 31 Javascript
jquery实现抽奖功能
Oct 22 jQuery
运算符&&的三个不同层次
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数据库操作分页类
2008/06/04 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
php 中的closure用法详解
2017/06/12 PHP
PHP7变量处理机制修改
2021/03/09 PHP
newxtree.js代码
2007/03/13 Javascript
奇妙的js
2007/09/24 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
wxpython绘制圆角窗体
2019/11/18 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
移动通信专业自荐信范文
2013/11/12 职场文书
网站设计师的岗位职责
2013/11/21 职场文书
机械专业毕业生推荐信范文
2013/11/25 职场文书
初中数学教学反思
2014/01/16 职场文书
卖房协议书
2014/04/11 职场文书
写字楼租赁意向书
2014/07/30 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书