mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 18:07:49 +00:00
Make _.defaults follow _.assign and only assign own properties of source.
Former-commit-id: 114dc47bbfa6db6a53a2fa03dd477fe86c3395cb
This commit is contained in:
20
build.js
20
build.js
@@ -1125,6 +1125,26 @@
|
|||||||
' }'
|
' }'
|
||||||
].join('\n'));
|
].join('\n'));
|
||||||
|
|
||||||
|
// replace `_.defaults`
|
||||||
|
source = source.replace(/^( *)var defaults *= *createIterator[\s\S]+?\);/m, [
|
||||||
|
' function defaults(object) {',
|
||||||
|
' if (!object) {',
|
||||||
|
' return object;',
|
||||||
|
' }',
|
||||||
|
' for (var argsIndex = 1, argsLength = arguments.length; argsIndex < argsLength; argsIndex++) {',
|
||||||
|
' var iteratee = arguments[argsIndex];',
|
||||||
|
' if (iteratee) {',
|
||||||
|
' for (var key in iteratee) {',
|
||||||
|
' if (object[key] == null) {',
|
||||||
|
' object[key] = iteratee[key];',
|
||||||
|
' }',
|
||||||
|
' }',
|
||||||
|
' }',
|
||||||
|
' }',
|
||||||
|
' return object;',
|
||||||
|
' }'
|
||||||
|
].join('\n'));
|
||||||
|
|
||||||
// replace `_.intersection`
|
// replace `_.intersection`
|
||||||
source = source.replace(/^( *)function intersection[\s\S]+?\n\1}/m, [
|
source = source.replace(/^( *)function intersection[\s\S]+?\n\1}/m, [
|
||||||
' function intersection(array) {',
|
' function intersection(array) {',
|
||||||
|
|||||||
@@ -977,7 +977,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assigns enumerable properties of the default object(s) to the `destination`
|
* Assigns own enumerable properties of source object(s) to the `destination`
|
||||||
* object for all `destination` properties that resolve to `null`/`undefined`.
|
* object for all `destination` properties that resolve to `null`/`undefined`.
|
||||||
* Once a property is set, additional defaults of the same property will be
|
* Once a property is set, additional defaults of the same property will be
|
||||||
* ignored.
|
* ignored.
|
||||||
@@ -995,7 +995,6 @@
|
|||||||
* // => { 'flavor': 'chocolate', 'sprinkles': 'rainbow' }
|
* // => { 'flavor': 'chocolate', 'sprinkles': 'rainbow' }
|
||||||
*/
|
*/
|
||||||
var defaults = createIterator(assignIteratorOptions, {
|
var defaults = createIterator(assignIteratorOptions, {
|
||||||
'useHas': false,
|
|
||||||
'objectLoop': 'if (result[index] == null) ' + assignIteratorOptions.objectLoop
|
'objectLoop': 'if (result[index] == null) ' + assignIteratorOptions.objectLoop
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -651,6 +651,12 @@
|
|||||||
equal(lodash.contains([1, 2, 3], 1, 2), true, '_.contains should ignore `fromIndex`: ' + basename);
|
equal(lodash.contains([1, 2, 3], 1, 2), true, '_.contains should ignore `fromIndex`: ' + basename);
|
||||||
equal(lodash.every([true, false, true]), false, '_.every: ' + basename);
|
equal(lodash.every([true, false, true]), false, '_.every: ' + basename);
|
||||||
|
|
||||||
|
function Foo() {}
|
||||||
|
Foo.prototype = { 'a': 1 };
|
||||||
|
|
||||||
|
deepEqual(lodash.defaults({}, new Foo), Foo.prototype, '_.defaults should assign inherited `source` properties: ' + basename);
|
||||||
|
deepEqual(lodash.extend({}, new Foo), Foo.prototype, '_.extend should assign inherited `source` properties: ' + basename);
|
||||||
|
|
||||||
actual = lodash.find(array, function(value) {
|
actual = lodash.find(array, function(value) {
|
||||||
return 'value' in value;
|
return 'value' in value;
|
||||||
});
|
});
|
||||||
|
|||||||
14
test/test.js
14
test/test.js
@@ -421,6 +421,20 @@
|
|||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
QUnit.module('source property checks');
|
||||||
|
|
||||||
|
_.each(['assign', 'defaults'], function(methodName) {
|
||||||
|
var func = _[methodName];
|
||||||
|
|
||||||
|
test('lodash.' + methodName + ' should not assign inherited `source` properties', function() {
|
||||||
|
function Foo() {}
|
||||||
|
Foo.prototype = { 'a': 1 };
|
||||||
|
deepEqual(func({}, new Foo), {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
QUnit.module('strict mode checks');
|
QUnit.module('strict mode checks');
|
||||||
|
|
||||||
_.each(['assign', 'bindAll', 'defaults'], function(methodName) {
|
_.each(['assign', 'bindAll', 'defaults'], function(methodName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user