• 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";
    }
  • 相关阅读:
    别人的代码
    ZOJ 1914 Arctic Network
    今日所得 2.22
    poj 2031 Building a Space Station
    POJ 1251 Jungle Roads
    优秀的开发者 vs. 糟糕的开发者
    有关读书求知的一些想法
    开发者拒绝写技术博客的常见理由
    写代码如坐禅:你是哪一类程序员?
    [C++] c++ new() 与new[]的区别
  • 原文地址:https://www.cnblogs.com/luckyXcc/p/5790429.html
Copyright © 2020-2023  润新知