有关于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 相关文章推荐
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
html a标签-超链接中confirm方法使用介绍
Jan 04 Javascript
详谈javascript异步编程
Feb 21 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
Dec 07 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
Angular开发者指南之入门介绍
Mar 05 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
VUE中使用HTTP库Axios方法详解
Feb 05 Javascript
vue实现路由懒加载的3种方法示例
Sep 01 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 04 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使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
JS类的封装及实现代码
2009/12/02 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
浅谈python可视化包Bokeh
2018/02/07 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
岗位竞聘书范文
2014/03/31 职场文书
高中班级口号
2014/06/09 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
电信营业员岗位职责
2015/04/14 职场文书
学生检讨书怎么写
2015/05/07 职场文书
解约证明模板
2015/06/19 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
python全面解析接口返回数据
2022/02/12 Python
Android存储中最基本的文件存储方式
2022/04/30 Java/Android
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang