有关于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 相关文章推荐
JavaScript QueryString解析类代码
Jan 17 Javascript
JavaScript制作的可折叠弹出式菜单示例
Apr 04 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
text-align:justify实现文本两端对齐 兼容IE
Aug 19 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
AngularJS 简单应用实例
Jul 28 Javascript
JavaScript简单生成 N~M 之间随机数的方法
Jan 13 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
Oct 22 Javascript
vue项目强制清除页面缓存的例子
Nov 06 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
环形加载进度条封装(Vue插件版和原生js版)
Dec 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中simplexml_load_string函数使用说明
2011/01/01 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
Python 数据结构之旋转链表
2017/02/25 Python
python机器学习之神经网络(一)
2017/12/20 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
将python图片转为二进制文本的实例
2019/01/24 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
python中什么是面向对象
2020/06/11 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
招商经理岗位职责
2013/11/16 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
师德师风承诺书
2014/05/23 职场文书
抵押贷款承诺书
2014/05/30 职场文书
一般党员对照检查材料
2014/09/24 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
python requests模块的使用示例
2021/04/07 Python