0

私はコーヒースクリプトを初めて使用するので、これを正しく行っているかどうか疑問に思っています。次のように、JavaScriptでの元の実装がありforEachます。

if(!Array.prototype.forEach){
   Array.prototype.forEach = function(callback, context){
     for(var i=0; i < this.length; i++){
        callback.call(context || null, this[i], i, this);
     }
   };
}

これが私が現在コーヒースクリプトで書いている方法です

if not Array.prototype.forEach
    Array.prototype.forEach = (callback, context) ->
    context ?= null 
    callback context, @[i], i, @ for i in @ 

しかし、それが正しいかどうか、特にコンテキストのヌルチェックが冗長に見え、コンテキストがまだ使用しているかのようにコンテキストが正しく適用されているかどうか疑問に思いますcall。コーヒースクリプトに関するいくつかの例を調べようとしましapplycallが、これまでのところあまり運がありません。

4

3 に答える 3

2

コンテキストの null チェックが冗長に見える

まあ、それも に設定contextnullundefinedます。しかし、実際にはそうなるはずundefinedです。

まだ call を使用しているかのように、コンテキストが正しく適用されているかどうか

いいえ、使用していないためです。

より良い:

if not Array.prototype.forEach
    Array.prototype.forEach = (callback) ->
        context = arguments[1] if arguments.length > 1
        for el, i in @
            callback.call context, el, i, @ if i of @
        undefined
于 2013-06-13T18:01:36.793 に答える
1

説明についてはBergiの回答に賛成しましたが、coffeescriptパラメーターにはデフォルトを設定できるため、少しクリーンなバージョンを以下に示します。

if not Array.prototype.forEach
    Array.prototype.forEach = (callback,context = null) ->
        for i in @
            callback.call context, @[i], i, @ if i of @
        undefined
于 2013-06-13T21:02:08.717 に答える