有关于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 相关文章推荐
兼容FireFox 的 js 日历 支持时间的获取
Mar 04 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 Javascript
window.location 对象所包含的属性
Oct 10 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
Mar 26 Javascript
jquery模拟进度条实现方法
Aug 03 Javascript
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
js实现图片局部放大效果详解
Mar 18 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 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
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
两个Javascript小tip资料
2010/11/23 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
Vue组件化开发思考
2018/02/02 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
python实现汉诺塔递归算法经典案例
2021/03/01 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
详解Python locals()的陷阱
2019/03/26 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
求职自荐信格式
2013/12/04 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
党员干部承诺书范文
2014/03/25 职场文书
小学生思想品德评语
2014/12/31 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
学习经验交流会总结
2015/11/02 职场文书
创业计划书之面包店
2019/09/12 职场文书
python glom模块的使用简介
2021/04/13 Python
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python