有关于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 相关文章推荐
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
javascript开发随笔二 动态加载js和文件
Nov 25 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
JS、CSS加载中的小问题探讨
Nov 26 Javascript
JavaScript中的迭代器和生成器详解
Oct 29 Javascript
js获取UserControl内容为拼html时提供方便
Nov 02 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
Dec 12 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
Jul 24 Javascript
Js图片点击切换轮播实现代码
Jul 27 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
Oct 02 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下使用SimpleXML 处理XML 文件
2010/02/27 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
div层的移动及性能优化
2010/11/16 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
高中生期末评语大全
2014/01/28 职场文书
国庆促销活动总结
2014/08/29 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2016年母亲节广告语
2016/01/28 职场文书