JS关于辅助函数inherit()的小问题

JavaScript继承实现
本文通过一个JavaScript函数示例,展示了如何创建一个继承自指定原型的新对象。特别地,文章解释了为何函数类型也可以作为参数传递,并通过实例演示了这一过程。

最近在阅读《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’类型的

转载于:https://www.cnblogs.com/mackxu/archive/2013/03/24/inherit0.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值