Я цеплял свои пользовательские функции, используя 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;
}
}
Если кто-то может пролить свет на то, почему это происходит, я бы очень признателен.
Как насчет '' 'return _.chain (data) .someFunc (param1) .anotherFunc (param2) .value()' '' Разве цепной метод не предназначен для создания пользовательских функций? И почему это будет работать вне класса, но не внутри? – mjolnir
Да, цепь выполняет целые функции. Строка 'return ...' отлично работает для меня, не могли бы вы предоставить дополнительную информацию об ошибке? Какую версию lodash вы используете? – EpicOrange
Lodash 4.17.2. Я использую его с webpack/угловой. Да, цепной метод работает для меня вне классов. При использовании внутри класса он ломается. – mjolnir