有关于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 相关文章推荐
在chrome中window.onload事件的一些问题
Mar 01 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
Apr 27 jQuery
微信小程序 选项卡的简单实例
May 24 Javascript
angularjs实现的购物金额计算工具示例
May 08 Javascript
原生js检测页面加载完毕的实例
Sep 11 Javascript
如何为vuex实现带参数的 getter和state.commit
Jan 04 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
May 31 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
24个ES6方法解决JS实际开发问题(小结)
May 31 Javascript
如何利用JavaScript编写更好的条件语句详解
Aug 10 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基础知识:控制结构
2006/12/13 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
php事务处理实例详解
2014/07/11 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
js使用highlight.js高亮你的代码
2017/08/18 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
Python的Django框架使用入门指引
2015/04/15 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
python3 flask实现文件上传功能
2020/03/20 Python
Python判断有效的数独算法示例
2019/02/23 Python
python中selenium库的基本使用详解
2020/07/31 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
全球性的在线购物网站:Zapals
2017/03/22 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
俄语专业毕业生推荐信
2013/10/28 职场文书
新年寄语大全
2014/04/12 职场文书
2014年政教处工作总结
2014/12/20 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
歌咏比赛主持词
2015/06/29 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
maven依赖的version声明控制方式
2022/01/18 Java/Android