2017-01-03 2 views
2

Если вы попробуйте запустить этот JS сниппет,Как вы называете ранее определенную функцию в определении объекта JS?

module.exports = { 
    add: function(a, b) { return a + b; }, 
    subtract: function(a, b) { return add(a, -b); } 
} 

вы получите ошибку, говоря, что add не определено. То же самое относится:

module.exports = { 
    add: function(a, b) { return a + b; }, 
    sums: { 
    two_and_three: add(2,3); 
    } 
} 

Каков наилучший способ вызова ранее упомянутой функции таким образом?

+1

'add' в этой области не определен. Он определяется как ключ в объекте, но ключи не являются определениями переменных. – 4castle

+0

@ 4castle Спасибо за разъяснение! –

ответ

4

Вы должны использовать this, как указано ниже:

module.exports = { 
    add: function(a, b) { return a + b; }, 
    subtract: function(a, b) { return this.add(a, -b); } 
} 

Для вашего второго варианта использования вам нужно что-то вроде этого:

module.exports = { 
    add: function(a, b) { return a + b; }, 
    sums: { 
    two_and_three: function() { return module.exports.add(2,3); } 
    } 
} 
-1
module.exports = { 
    add: function(a, b) { return a + b; }, 

    subtract: function(a, b) { return this.add(a, -b); } 
} 
1

Понимание различных JS function invocation patterns поможет здесь:

Как вызывается функция, решает функцию n, который доступен с использованием ключевого слова 'this' внутри функции.

Сейчас подходит к коду:

module.exports = { 
    add: function(a, b) { return a + b; }, 
    subtract: function(a, b) { return add(a, -b); } 
} 

Мы вызываем функцию вычитания следующим образом:

module.exports.subtract(1, 3); 

Метод шаблон вызова используется здесь. Это означает, что в функции вычитания будет ссылаться на родительский объект substract (module.exports), который также содержит функцию add. Следовательно, функция add можно получить с помощью this.add внутри функции вычитания, например:

module.exports = { 
    add: function(a, b) { return a + b; }, 
    subtract: function(a, b) { return this.add(a, -b); } 
} 

Во втором случае, вы можете использовать wdosanjos «s answer, если иметь sums.two_and_three как функция работает для вас, или если Вам нужны суммы в качестве результатов, это может быть сделано:

module.exports = { 
    add: function(a, b) { return a + b; } 
}; 

module.exports.sums = { 
    two_and_three: module.exports.add(2,3), 
    three_and_four: module.exports.add(3,4) 
}; 

Или есть другие способы предложили here, для доступа родительского объекта ОТПРЫСКИ/свойства.

Надеюсь, что это поможет :)

Смежные вопросы