zoukankan      html  css  js  c++  java
  • JS关于辅助函数inherit()的小问题

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

  • 相关阅读:
    CentOS系统下的数据盘挂载
    在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式
    C盘占用过满问题
    大量ECAgent报错
    微信电脑版不断崩溃
    java web 在tomcat没有正常输出
    文件解压缩失败
    在myeclipse安装beyond插件
    限时免费 GoodSync 10 同步工具【转】
    soapUI的bug切换版本解决
  • 原文地址:https://www.cnblogs.com/mackxu/p/inherit0.html
Copyright © 2011-2022 走看看