JavaScript: вызвать функцию по умолчанию? - PullRequest
0 голосов
/ 25 июня 2018

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

let text =function()
{
    this.main = ...;
    this.toArr = ...;
};

let t = new text();

console.log( t() ); // call a function 'main' in text;
t().toArr(); // call a function 'toArr' in text;

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Попробуйте это:

let text = function (myarg) {
    // Usage: var t = new text(<arg>);
    this.uniqueProperty = "test";
    var main = () => {
        // main code
        return {
            toArr: () => {
                return [myarg, this.uniqueProperty];
            }
        };
    };
    return main;
}

var t = new text("hey world");

console.log(t());
console.log(t().toArr());

Звонки такие же, как в вашем вопросе

Примечание: ваша основная функция теперь возвращает объект.


Как это работает?

Вы вызываете new text("arg"), но конструктор возвращает главную функцию вместо this. Функция main возвращает объект с функцией toArr, и к ней можно получить доступ через код new text("arg")().toArr. Почему я поместил обе функции в () => {} ?. Ответ прост - это как получить доступ к свойствам текстового экземпляра. Таким образом, мы можем получить доступ к уникальным text свойствам. Иначе, this будет main ссылкой на функцию.

0 голосов
/ 25 июня 2018

Пожалуйста, внимательно посмотрите на Наследование MDN part.

Это простое использование, как показано ниже:

let text = function()
{
    this.main = function(){
      return {a:1};
    }
    this.toArr = function(){
      return [1,2,3];
    }
};

let t = new text();

console.log( t.main() ); // call a function 'main' in text;
console.log(t.toArr()); // call a function 'toArr' in text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...