.call/.apply 为此设置一个数字,而不是作为原始值

.call/.apply set a Number for this not as a Primitive Value

本文关键字:数字 原始 一个 apply 设置 call      更新时间:2023-09-26

我想写一个函数来重复一个函数x次。现在我想将重复的计数器传递为"this",但传递的值不是实数,它是一个包含"PrimitiveValue"的对象。

现场演示:http://jsfiddle.net/0Lda6qnp/

有没有办法将其设置为数字?func.apply( Number(i), args );不行。

repeat = function( count, func ) {
    var args = [];
    $.each( arguments, function( index, value ) {
        if($.isNumeric(value)) {
            args[args.length] = Number(value);
        } else {
            args[args.length] = value;
        }
    });
    args = args.slice( 2 );
    for( var i = 0; i < count; i++ ) {
        func.apply( i, args );
    }
};

我认为没有任何充分的理由将计数器传递为this.只需将其作为参数传递即可。


您看到Number对象的原因是,在草率模式下,所有this值都隐式转换为对象。如果要避免这种情况,则需要对func使用严格模式。

repeat( 3, function( a1, a2 ) {
    "use strict";
     $('#result').append( this + ' - type: ' + typeof this + '   - arguments: ' + a1 + ' ' + a2 + ' ' + '<br>' );
}, 1, 'Hallo');