mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-08 10:17:48 +00:00
Add contextProps to make _.runInContext work in older IEs.
Former-commit-id: 208f25296d35ed29a283fb1598de0052a5a2703d
This commit is contained in:
36
lodash.js
36
lodash.js
@@ -61,8 +61,15 @@
|
|||||||
/** Used to match unescaped characters in compiled string literals */
|
/** Used to match unescaped characters in compiled string literals */
|
||||||
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
|
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
|
||||||
|
|
||||||
|
/** Used to assign default `context` object properties */
|
||||||
|
var contextProps = [
|
||||||
|
'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object', 'RegExp',
|
||||||
|
'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN', 'parseInt',
|
||||||
|
'setImmediate', 'setTimeout', 'toString'
|
||||||
|
];
|
||||||
|
|
||||||
/** Used to fix the JScript [[DontEnum]] bug */
|
/** Used to fix the JScript [[DontEnum]] bug */
|
||||||
var shadowed = [
|
var shadowedProps = [
|
||||||
'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
|
'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
|
||||||
'toLocaleString', 'toString', 'valueOf'
|
'toLocaleString', 'toString', 'valueOf'
|
||||||
];
|
];
|
||||||
@@ -122,7 +129,7 @@
|
|||||||
* @returns {Function} Returns the `lodash` function.
|
* @returns {Function} Returns the `lodash` function.
|
||||||
*/
|
*/
|
||||||
function runInContext(context) {
|
function runInContext(context) {
|
||||||
context = context ? _.extend(createObject(window), context) : window;
|
context = context ? _.defaults({}, context, _.pick(window, contextProps)) : window;
|
||||||
|
|
||||||
/** Native constructor references */
|
/** Native constructor references */
|
||||||
var Array = context.Array,
|
var Array = context.Array,
|
||||||
@@ -467,9 +474,9 @@
|
|||||||
' <% if (hasDontEnumBug) { %>\n\n' +
|
' <% if (hasDontEnumBug) { %>\n\n' +
|
||||||
' var ctor = iterable.constructor;\n' +
|
' var ctor = iterable.constructor;\n' +
|
||||||
' <% for (var k = 0; k < 7; k++) { %>\n' +
|
' <% for (var k = 0; k < 7; k++) { %>\n' +
|
||||||
" index = '<%= shadowed[k] %>';\n" +
|
" index = '<%= shadowedProps[k] %>';\n" +
|
||||||
' if (<%' +
|
' if (<%' +
|
||||||
" if (shadowed[k] == 'constructor') {" +
|
" if (shadowedProps[k] == 'constructor') {" +
|
||||||
' %>!(ctor && ctor.prototype === iterable) && <%' +
|
' %>!(ctor && ctor.prototype === iterable) && <%' +
|
||||||
' } %>hasOwnProperty.call(iterable, index)) {\n' +
|
' } %>hasOwnProperty.call(iterable, index)) {\n' +
|
||||||
' <%= loop %>\n' +
|
' <%= loop %>\n' +
|
||||||
@@ -633,7 +640,9 @@
|
|||||||
}
|
}
|
||||||
if (this instanceof bound) {
|
if (this instanceof bound) {
|
||||||
// ensure `new bound` is an instance of `func`
|
// ensure `new bound` is an instance of `func`
|
||||||
thisBinding = createObject(func.prototype);
|
noop.prototype = func.prototype;
|
||||||
|
thisBinding = new noop;
|
||||||
|
noop.prototype = null;
|
||||||
|
|
||||||
// mimic the constructor's `return` behavior
|
// mimic the constructor's `return` behavior
|
||||||
// http://es5.github.com/#x13.2.2
|
// http://es5.github.com/#x13.2.2
|
||||||
@@ -714,7 +723,6 @@
|
|||||||
* top - A string of code to execute before the iteration branches.
|
* top - A string of code to execute before the iteration branches.
|
||||||
* loop - A string of code to execute in the object loop.
|
* loop - A string of code to execute in the object loop.
|
||||||
* bottom - A string of code to execute after the iteration branches.
|
* bottom - A string of code to execute after the iteration branches.
|
||||||
*
|
|
||||||
* @returns {Function} Returns the compiled function.
|
* @returns {Function} Returns the compiled function.
|
||||||
*/
|
*/
|
||||||
function createIterator() {
|
function createIterator() {
|
||||||
@@ -725,7 +733,7 @@
|
|||||||
'isKeysFast': isKeysFast,
|
'isKeysFast': isKeysFast,
|
||||||
'nonEnumArgs': nonEnumArgs,
|
'nonEnumArgs': nonEnumArgs,
|
||||||
'noCharByIndex': noCharByIndex,
|
'noCharByIndex': noCharByIndex,
|
||||||
'shadowed': shadowed,
|
'shadowedProps': shadowedProps,
|
||||||
|
|
||||||
// iterator options
|
// iterator options
|
||||||
'arrays': 'isArray(iterable)',
|
'arrays': 'isArray(iterable)',
|
||||||
@@ -757,20 +765,6 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new object that inherits from the given `prototype` object.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object} prototype The prototype object.
|
|
||||||
* @returns {Object} Returns the new object.
|
|
||||||
*/
|
|
||||||
function createObject(prototype) {
|
|
||||||
noop.prototype = prototype;
|
|
||||||
var result = new noop;
|
|
||||||
noop.prototype = null;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A function compiled to iterate `arguments` objects, arrays, objects, and
|
* A function compiled to iterate `arguments` objects, arrays, objects, and
|
||||||
* strings consistenly across environments, executing the `callback` for each
|
* strings consistenly across environments, executing the `callback` for each
|
||||||
|
|||||||
Reference in New Issue
Block a user