underscore.js 如何为函数创建别名?
How does underscore.js create aliases for functions?
例如,_.each
的别名是 _.forEach
。
我可以调用 [1, 2, 3].forEach(alter)
,但是当我调用 [1, 2, 3].each(alert)
时,它显示
TypeError: [1, 2, 3].each is not a function
我没有在源代码中找到 forEach
的定义,那么 underscore.js 是怎么做到的?
就此而言,常规 forEach
与 _.forEach
或 _.each
不同。标准 [].forEach
是自 ES5 以来 Array
API 的一部分的原生函数。 (它在 Array
原型上)
在 _.forEach
的情况下,它实际上并没有使用 [].forEach
方法来使其向后兼容(ES5 之前),因此它只是使用 for
循环。
就别名而言,Underscore 通过将多个变量指向同一事物来创建别名。
您可以在注释来源的 section 20 中清楚地看到所有这些:
// alias _.each and _.forEach to point to the same function
_.each = _.forEach = function(obj, iteratee, context) {
// ...
if (isArrayLike(obj)) {
// use a for loop to perform the iteration
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
// ...
下面是下划线的简单示例:
var _ = {}; // create our dummy Underscore object
_.each = _.forEach = function(arr, callback) { // alias _.each and _.forEach to loop and do callbacks
for (var i = 0, l = arr.length; i < l; i++) {
callback(arr[i], i);
}
}
var a = ['a', 'b', 'c'];
_.each(a, function(item, index) {
console.log(index + ': ' + item);
});
例如,_.each
的别名是 _.forEach
。
我可以调用 [1, 2, 3].forEach(alter)
,但是当我调用 [1, 2, 3].each(alert)
时,它显示
TypeError: [1, 2, 3].each is not a function
我没有在源代码中找到 forEach
的定义,那么 underscore.js 是怎么做到的?
就此而言,常规 forEach
与 _.forEach
或 _.each
不同。标准 [].forEach
是自 ES5 以来 Array
API 的一部分的原生函数。 (它在 Array
原型上)
在 _.forEach
的情况下,它实际上并没有使用 [].forEach
方法来使其向后兼容(ES5 之前),因此它只是使用 for
循环。
就别名而言,Underscore 通过将多个变量指向同一事物来创建别名。
您可以在注释来源的 section 20 中清楚地看到所有这些:
// alias _.each and _.forEach to point to the same function
_.each = _.forEach = function(obj, iteratee, context) {
// ...
if (isArrayLike(obj)) {
// use a for loop to perform the iteration
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
// ...
下面是下划线的简单示例:
var _ = {}; // create our dummy Underscore object
_.each = _.forEach = function(arr, callback) { // alias _.each and _.forEach to loop and do callbacks
for (var i = 0, l = arr.length; i < l; i++) {
callback(arr[i], i);
}
}
var a = ['a', 'b', 'c'];
_.each(a, function(item, index) {
console.log(index + ': ' + item);
});