-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObject.js
More file actions
101 lines (87 loc) · 2.24 KB
/
Object.js
File metadata and controls
101 lines (87 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
"use strict";
Object.defineProperty( Object.prototype, 'merge', {
value: function ( object ) {
var keys = Object.getOwnPropertyNames( object );
for ( var i = 0, iend = keys.length; i < iend; ++i ) {
var key = keys[ i ];
this[ key ] = object[ key ];
}
return this;
},
writable: true
} );
Object.defineProperty( Object.prototype, 'mergeDeep', {
value: function ( object ) {
var keys = Object.getOwnPropertyNames( object );
for ( var i = 0, iend = keys.length; i < iend; ++i ) {
var key = keys[ i ];
var existing = this[ key ];
var value = object[ key ];
if ( Object.isObject( existing ) && Object.isObject( value ) ) {
existing.mergeDeep( value );
}
else {
this[ key ] = value;
}
}
return this;
},
writable: true
} );
Object.defineProperty( Object.prototype, 'duplicate', {
value: function () {
if ( !Object.isObject( this ) ) {
return this;
}
var ret = {};
var keys = Object.getOwnPropertyNames( this );
for ( var i = 0, iend = keys.length; i < iend; ++i ) {
var key = keys[ i ];
var item = this[ key ];
if ( item instanceof Object && item.duplicate instanceof Function ) {
ret[ key ] = item.duplicate();
}
else {
ret[ key ] = item;
}
}
return ret;
},
writable: true
} );
Object.defineProperty( Object, 'isObject', {
value: function ( obj ) {
return obj instanceof Object && Object.getPrototypeOf( obj ) === Object.prototype;
},
writable: true
} );
Object.defineProperty( Object, 'newArgs', {
value: function ( ctor, args ) {
return new ( Function.prototype.bind.apply( ctor, [ null ].concat( args ) ) );
},
writable: true
} );
Object.defineProperty( Object, 'values', {
value: function ( obj ) {
var keys = Object.keys( obj );
var values = new Array( keys.length );
for ( var i = 0, iend = keys.length; i < iend; ++i ) {
values[ i ] = obj[ keys[ i ] ];
}
return values;
},
writable: true
} );
Object.defineProperty( Object, 'filter', {
value: function ( object, callback, thisArg ) {
var keys = Object.keys( object );
for ( var i = 0, iend = keys.length; i < iend; ++i ) {
var key = keys[i];
if ( callback.call( thisArg, object[ key ], key, object ) !== true ) {
delete object[ key ];
}
}
return object;
},
writable: true
} );