有关于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 相关文章推荐
FCK调用方法..
Dec 21 Javascript
JavaScript 直接操作本地文件的实现代码
Dec 01 Javascript
Javascript 面向对象 继承
May 13 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
Oct 21 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
Javascript中的匿名函数与封装介绍
Mar 15 Javascript
概述VUE2.0不可忽视的很多变化
Sep 25 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
Dec 07 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
Feb 18 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
Vue和React有哪些区别
Sep 12 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
php实现三级级联下拉框
2016/04/17 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
javascript定时器完整实例
2015/02/10 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
Node.js assert断言原理与用法分析
2019/01/04 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
解决python报错MemoryError的问题
2018/06/26 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
python中的global关键字的使用方法
2019/08/20 Python
python之列表推导式的用法
2019/11/29 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
Python之字典对象的几种创建方法
2020/09/30 Python
英语自荐信常用语句
2013/12/13 职场文书
费用会计岗位职责
2014/01/01 职场文书
校园文明倡议书
2014/05/16 职场文书
奥运会口号
2014/06/13 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python