Назначение функции как свойства другой функции - PullRequest
0 голосов
/ 17 января 2020

Почему это работает:

var myFunction = function() {}

myFunction.printSomething = function() {
    console.log("This is something");
}

myFunction.printSomething();

Пока это не так? («Ожидается идентификатор»)

var myFunction = function() {
    printSomething: function() {
        console.log("This is something");
    }
}

myFunction.printSomething();

Действительно ли я успешно создал новое свойство printSomething объекта функции myFunction в первом примере? Я ожидал, что оба будут работать, учитывая, что функции предположительно являются объектами в javascript. Я правильно понимаю?

Ответы [ 3 ]

1 голос
/ 17 января 2020

Второй пример будет работать, если вы сделаете это:

var myFunction = function() {
    return {
        printSomething: function() {
            console.log("This is something");
        }
    }
}

myFunction().printSomething();

Синтаксис, который у вас был, не работает. Вы не можете просто повесить printSomething: function(){}; на открытом месте в середине подобной функции. Вы можете иметь var printSomething = function(){}, или вы можете сделать то, что я сделал, и вернуть объект, где printSomething: function(){} является частью этого объекта

0 голосов
/ 17 января 2020

Спасибо Пойнти за то, что он указал my в правильном направлении в своем комментарии.

Да, функции действительно являются объектами, и они могут содержать свойства, как и любой другой объект.

Однако во втором примере блок кода в { } - это то, что выполняется при вызове myFunction, а не его определение как объекта.

var myFunction = function() {
    // 'printSomething:' can't just be hanging like that!
    printSomething: function() {
        console.log("This is something");
    }
}

myFunction.printSomething();
0 голосов
/ 17 января 2020

Вам необходимо вернуть объект из функции и вызвать его, как ожидалось.

Пожалуйста, ознакомьтесь с приведенным ниже фрагментом, который я создал, для лучшего понимания.

var myFunction = function() {
  return {
    printSomething: function() {
        console.log("This is something");
    }
  };
}

myFunction().printSomething();
...