util: Check input to util.inherits

PR-URL: https://github.com/iojs/io.js/pull/1240
Reviewed-By: Brendan Ashworth <brendan.ashworth@me.com>
Reviewed-By: Petka Antonov <petka_antonov@hotmail.com>
This commit is contained in:
Connor Peet 2015-03-22 20:45:16 -04:00 committed by Brendan Ashworth
parent fe4434b77a
commit 849319a260
2 changed files with 22 additions and 0 deletions

View File

@ -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: {

View File

@ -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);