2017-02-11 8 views
1

Я цеплял свои пользовательские функции, используя lodash's _.mixin или _.chain. Код работает нормально, когда он находился за пределами класса, как показано ниже:Lodash mixin не работает в JavaScript Класс

Работа Код:

 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

Как насчет '' 'return _.chain (data) .someFunc (param1) .anotherFunc (param2) .value()' '' Разве цепной метод не предназначен для создания пользовательских функций? И почему это будет работать вне класса, но не внутри? – mjolnir

+0

Да, цепь выполняет целые функции. Строка 'return ...' отлично работает для меня, не могли бы вы предоставить дополнительную информацию об ошибке? Какую версию lodash вы используете? – EpicOrange

+0

Lodash 4.17.2. Я использую его с webpack/угловой. Да, цепной метод работает для меня вне классов. При использовании внутри класса он ломается. – mjolnir