blob: 32ead7770fa2c9fa8d57d332b0c1412d13b78308 [file] [log] [blame]
'use strict'
var xtend = require('xtend')
var inherits = require('inherits')
module.exports = unherit
// Create a custom constructor which can be modified without affecting the
// original class.
function unherit(Super) {
var result
var key
var value
inherits(Of, Super)
inherits(From, Of)
// Clone values.
result = Of.prototype
for (key in result) {
value = result[key]
if (value && typeof value === 'object') {
result[key] = 'concat' in value ? value.concat() : xtend(value)
}
}
return Of
// Constructor accepting a single argument, which itself is an `arguments`
// object.
function From(parameters) {
return Super.apply(this, parameters)
}
// Constructor accepting variadic arguments.
function Of() {
if (!(this instanceof Of)) {
return new From(arguments)
}
return Super.apply(this, arguments)
}
}