From 404e658a5d8878b622d611a1904dba648f2102be Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 8 Nov 2014 02:26:18 -0800 Subject: [PATCH] Fix `_.isFunction` and `_.isNative` for Safari 8. --- lodash.js | 6 +++--- test/test.js | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lodash.js b/lodash.js index a68103232..0db9fb3fc 100644 --- a/lodash.js +++ b/lodash.js @@ -7377,9 +7377,9 @@ return typeof value == 'function' || false; } // fallback for older versions of Chrome and Safari - if (isFunction(/x/)) { + if (isFunction(/x/) || !Uint8Array || !isFunction(Uint8Array)) { isFunction = function(value) { - return typeof value == 'function' && toString.call(value) == funcClass; + return toString.call(value) == funcClass; }; } @@ -7461,7 +7461,7 @@ * // => false */ function isNative(value) { - if (isFunction(value)) { + if (typeof value == 'function' || toString.call(value) == funcClass) { return reNative.test(fnToString.call(value)); } return (value && typeof value == 'object' && diff --git a/test/test.js b/test/test.js index 5c14eee39..8d0d068b6 100644 --- a/test/test.js +++ b/test/test.js @@ -6464,6 +6464,19 @@ strictEqual(_.isFunction(slice), true); }); + test('should return `true` for typed array constructors', 1, function() { + var expected = _.map(typedArrays, function(type) { + return toString.call(root[type]) == '[object Function]'; + }); + + var actual = _.map(typedArrays, function(type) { + var Ctor = root[type]; + return Ctor ? _.isFunction(Ctor) : false; + }); + + deepEqual(actual, expected); + }); + test('should return `false` for non functions', 11, function() { var expected = _.map(falsey, _.constant(false));