2017-02-11 4 views
1

lodashの_.mixinまたは_.chainを使用して私のカスタム関数をチェーンしていました。JavaScriptで動作しないLodash mixinクラス

の作業コード::それは以下のようにクラスの外にいたとき、コードがうまく働いていた

 function start(data, param1, param2) { 
     _.mixin({ 
     'someFunc': this.someFunc, 
     'anotherFunc': this.anotherFunc 
     }) 

     // Chaining directly works 
     _.someFunc(data, param1) 
     .anotherFunc(param2) 

    // Using chain works 
    return _.chain(data) 
     .someFunc(param1) 
     .anotherFunc(param2) 
    } 

    function someFunc(data, param) { 
     return data; 
    } 

    function anotherFunc(data, param) { 
     return data + param; 
    } 

私はクラスのコードを使用した瞬間、それはTypeError: _.chain(...).someFunc is not a function

import * as _ from 'lodash'; 

    class MyClass { 
    constructor() { 
     //.... code 
    } 

    start(data, param1, param2) { 

     // Does not work 
     _.mixin({ 
     'someFunc': this.someFunc, 
     'anotherFunc': this.anotherFunc 
     }) 

     // Does not work 
     _.someFunc(data, param1) 
     .anotherFunc(param2) 

     // Also does not work 
     return _.chain(data) 
     .someFunc(param1) 
     .anotherFunc(param2) 

    // Using them separately works: 
    let result = _.someFunc(param1); 
    let result2 = _.anotherFunc(param2); 

    } 

    someFunc(data, param) { 
     return data; 
    } 

    anotherFunc(data, param) { 
     return data + param; 
    } 


    } 
を投げ始めました

なぜこれが起こっているのかについて誰でも知ることができれば、本当に感謝しています。

答えて

0
_.someFunc(data, param1) 
.anotherFunc(param2) 

someFuncはlodashラッパーオブジェクトを返しませんので、あなたは、戻り値にanotherFuncを呼び出すことはできません。

+0

返り値_.chain(data).someFunc(param1).anotherFunc(param2).value() '' 'チェーンメソッドがカスタム関数を連鎖させないのですか?そして、なぜこれはクラスの外では動作しますが、内部では動作しませんか? – mjolnir

+0

はい、チェーンはチェーンのカスタム機能を実行します。 'return ...'行は私のためにうまくいきます、あなたはあなたのエラーに関するより多くの情報を提供できますか?どのバージョンのロダッシュを実行していますか? – EpicOrange

+0

Lodash 4.17.2。私はwebpack/angularでそれを使用しています。チェーンメソッドはクラスの外で私のために働く。クラスの内部で使用すると、それは壊れます。 – mjolnir

関連する問題