有关于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 相关文章推荐
Code: write(s,d) 输出连续字符串
Aug 19 Javascript
JavaScript Konami Code 实现代码
Jul 29 Javascript
jQuery中创建实例与原型继承揭秘
Dec 21 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
浅析JQuery中的html(),text(),val()区别
Sep 01 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
微信开发 js实现tabs选项卡效果
Oct 28 Javascript
JS生成和下载二维码的代码
Dec 07 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
OpenLayers3实现地图显示功能
Sep 25 Javascript
微信小程序实现左滑删除效果
Nov 18 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 各种应用乱码问题的解决方法
2010/05/09 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
jquery的index方法实现tab效果
2011/02/16 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
python实现日志按天分割
2019/07/22 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
机电一体化毕业生求职信
2013/11/02 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
环保倡议书怎么写
2014/05/16 职场文书
普通话宣传标语
2014/06/26 职场文书
安全生产年活动总结
2014/08/29 职场文书
2015大学生实训报告
2014/11/05 职场文书
2014年行政部工作总结
2014/11/19 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
人生感悟经典句子
2019/08/20 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers