Skip to content

Commit 8d0bfb1

Browse files
committed
fix(ui): extend() method quasarframework#12831
1 parent 444fbd2 commit 8d0bfb1

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

ui/src/utils/extend.js

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
1-
import { isObject } from './private/is'
1+
const
2+
toString = Object.prototype.toString,
3+
hasOwn = Object.prototype.hasOwnProperty,
4+
class2type = {}
5+
6+
'Boolean Number String Function Array Date RegExp Object'.split(' ').forEach(name => {
7+
class2type[ '[object ' + name + ']' ] = name.toLowerCase()
8+
})
9+
10+
function type (obj) {
11+
return obj === null ? String(obj) : class2type[ toString.call(obj) ] || 'object'
12+
}
13+
14+
function isPlainObject (obj) {
15+
if (!obj || type(obj) !== 'object') {
16+
return false
17+
}
18+
19+
if (obj.constructor
20+
&& !hasOwn.call(obj, 'constructor')
21+
&& !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
22+
return false
23+
}
24+
25+
let key
26+
for (key in obj) {} // eslint-disable-line
27+
28+
return key === void 0 || hasOwn.call(obj, key)
29+
}
230

331
export default function extend () {
432
let
@@ -14,7 +42,7 @@ export default function extend () {
1442
i = 2
1543
}
1644

17-
if (Object(target) !== target && typeof target !== 'function') {
45+
if (Object(target) !== target && type(target) !== 'function') {
1846
target = {}
1947
}
2048

@@ -33,13 +61,13 @@ export default function extend () {
3361
continue
3462
}
3563

36-
if (deep && copy && (isObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
64+
if (deep && copy && (isPlainObject(copy) || (copyIsArray = type(copy) === 'array'))) {
3765
if (copyIsArray) {
3866
copyIsArray = false
39-
clone = src && Array.isArray(src) === true ? src : []
67+
clone = src && type(src) === 'array' ? src : []
4068
}
4169
else {
42-
clone = src && isObject(src) === true ? src : {}
70+
clone = src && isPlainObject(src) ? src : {}
4371
}
4472

4573
target[ name ] = extend(deep, clone, copy)

0 commit comments

Comments
 (0)