mirror of https://gitee.com/antv-l7/antv-l7
46 lines
888 B
JavaScript
46 lines
888 B
JavaScript
'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)
|
|
}
|
|
}
|