zoukankan      html  css  js  c++  java
  • Node.js的原型继承函数util.inherits

    util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数。JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript 没有 提供对象继承的语言级别特性,而是通过原型复制来实现的,具体细节我们在附录A中讨论, 在这里我们只介绍 util.inherits 的用法,示例如下:

    var util = require('util');
    function Base() {
        this.name = 'base';
        this.base = 1991;
        this.sayHello = function() {
            console.log('Hello ' + this.name);
        };
    }
    Base.prototype.showName = function() {
        console.log(this.name);
    };
    function Sub() {
        this.name = 'sub';
    }
    util.inherits(Sub, Base);
    var objBase = new Base();
    objBase.showName();
    objBase.sayHello();
    console.log(objBase);
    var objSub = new Sub();
    objSub.showName();
    //objSub.sayHello();
    console.log(objSub);

    我们定义了一个基础对象 Base 和一个继承自 Base 的 Sub,Base 有三个在构造函数 内定义的属性和一个原型中定义的函数,通过 util.inherits 实现继承。运行结果如下:

    base
    Hello base
    { name: 'base', base: 1991, sayHello: [Function] }
    sub
    { name: 'sub' }

    注意,Sub 仅仅继承了 Base 在原型中定义的函数,而构造函数内部创造的 base 属 性和 sayHello 函数都没有被 Sub 继承。同时,在原型中定义的属性不会被 console.log 作 为对象的属性输出。如果我们去掉 objSub.sayHello(); 这行的注释,将会看到:

    node.js:201
    throw e; // process.nextTick error, or 'error' event on first tick
    ^
    TypeError: Object # has no method 'sayHello'
    at Object.

    如果Sub改成以下的代码,就会继承Base构造函数内定义的属性
    function Sub(){
    // 如果要继承构造函数内部的属性和方法,
    // 可以使用 call apply
       Base.call(this);
        this.name = "son";
    }
  • 相关阅读:
    ES6-01 2018-02-06
    8.1 IO类
    2.4 const限定符
    C++命名空间
    win7系统docker安装ubuntu
    win7安装docker
    wuzhicms 查看模板中的所有可用变量和值
    wuzhicms上传弹出层,如何返回数据到当前页面?
    wuzhicms 无规律推荐位标签的嵌套使用
    【wuzhicms】apache 设置禁止访问某些文件或目录
  • 原文地址:https://www.cnblogs.com/luckyXcc/p/5790429.html
Copyright © 2011-2022 走看看