diff --git a/lib/util.js b/lib/util.js index fb5f7f4b31ab3d..69c46e6ea7a9fb 100644 --- a/lib/util.js +++ b/lib/util.js @@ -616,8 +616,23 @@ exports.log = function() { * @param {function} ctor Constructor function which needs to inherit the * prototype. * @param {function} superCtor Constructor function to inherit prototype from. + * @throws {TypeError} Will error if either constructor is null, or if + * the super constructor lacks a prototype. */ exports.inherits = function(ctor, superCtor) { + + if (ctor === undefined || ctor === null) + throw new TypeError('The constructor to `inherits` must not be ' + + 'null or undefined.'); + + if (superCtor === undefined || superCtor === null) + throw new TypeError('The super constructor to `inherits` must not ' + + 'be null or undefined.'); + + if (superCtor.prototype === undefined) + throw new TypeError('The super constructor to `inherits` must ' + + 'have a prototype.'); + ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { diff --git a/test/parallel/test-util.js b/test/parallel/test-util.js index 2fb4bc5609bcd6..03456d64393842 100644 --- a/test/parallel/test-util.js +++ b/test/parallel/test-util.js @@ -78,3 +78,10 @@ assert.deepEqual(util._extend({a:1}, true), {a:1}); assert.deepEqual(util._extend({a:1}, false), {a:1}); assert.deepEqual(util._extend({a:1}, {b:2}), {a:1, b:2}); assert.deepEqual(util._extend({a:1, b:2}, {b:3}), {a:1, b:3}); + +// inherits +var ctor = function() {}; +assert.throws(function() { util.inherits(ctor, {}) }, TypeError); +assert.throws(function() { util.inherits(ctor, null) }, TypeError); +assert.throws(function() { util.inherits(null, ctor) }, TypeError); +assert.doesNotThrow(function() { util.inherits(ctor, ctor) }, TypeError);