首页 > 上网技巧 > 电脑小技巧 > 解析Node.js实现对象继承的方法util.inherits()

解析Node.js实现对象继承的方法util.inherits()

时间:2018-12-25 09:54 作者:QQ地带 我要评论

util.inherits()是Node.js工具类util提供的方法,该方法会将父类原型链上的方法复制到子类中,实现原型式继承。
 
 
1. util.inherits()语法结构
util.inherits(constructor, superConstructor)
constructor:子类的构造函数
superConstructor:父类的构造函数
示例:使用util.inherits()实现对象继承:
 
var util = require('util');
 
// 基类
function Site() {
  this.name = 'Site';
  this.domain = 'domain';
}
 
Site.prototype.create = function(name, domain) {
  this.name = name;
  this.domain = domain;
};
 
// 子类
function Itbilu() {
  Site.call(this); //调用基类的构造函数
}
 
// 继承父类
util.inherits(Itbilu, Site);
 
// 创建类实例
var itbilu = new Itbilu();
 
itbilu instanceof Site;  // true
tbilu instanceof Itbilu;  // true
 
itbilu.create('IT笔录', 'itbilu.com');
itbilu.name;    // 'IT笔录'
itbilu.domain;  // 'itbilu.com'
 
2. util.inherits()实现原理
util.inherits()方法对继承的实现,其本质上还是JavaScript原型链式继承。该方法会将父类superConstructor原型链上的方法复制到子类constructor原型链上,在其内部是调用Object.create()实现新对象的创建及原型链方法的复制。
 
util.inherits()内部实现如下:
 
exports.inherits = function(ctor, superCtor) {
  // 一些参数的合法性判断,略……
 
  ctor.super_ = superCtor;
  ctor.prototype = Object.create(superCtor.prototype, {
    constructor: {
      value: ctor,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
};
从以上实现代码可以看出,util.inherits()方法内部除调用Object.create()方法实现原型继承外,还将父类的构造函数写入到了子类的ctor.super_属性中,在使用中可以通过该属性方便调用到父类的构造函数。

标签: Node.js
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告