Не могу связать «это» с импортированной функцией - JavaScript - PullRequest
0 голосов
/ 10 июня 2018

Я новичок и хочу привязать 'this' к вспомогательным функциям, которые я импортировал из другого файла (чтобы я мог использовать переменные, созданные в текущей лексической среде).

Но я признал, что я могу привязать эти импортированные функции к любому объекту - который я создал в файле, в который я импортировал их - но не к текущему this.

node.js пример: https://github.com/sdeli/issues-with-this

// random-js-file.js

// this is the function I import in app.js
function logOutThis() {
    console.log(this);
}

module.exports = logOutThis;
// --------------------------------

// app.js
const importedFn = require('./random-js-file.js');

// this is now the global of random-js-file.js
importedFn();
console.log('--------------------------------');

var monkey = {
  chimp : 'chimp'
}

// this is now the object 'monkey'
var myfunction = importedFn.bind(monkey);
myfunction();
console.log('---------------------------------');

//this should be now the current this
var myfunction2 = importedFn.bind(this);
myfunction2();
// console.log displays '{}' and i can not refer to the variable in this lexical environment

Поэтому я не понимаю, почему я не могу связать 'this' с функцией, которую я импортировал, но я могу связать ее с любым объектом.

СпасибоВы за ваши предложения

1 Ответ

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

Нет способа получить доступ к внутреннему контексту импортированного модуля, если он явно не экспортирует нужные биты (или не предоставляет функции, которые их представляют).Javascript this не ведет себя как Java this, а модули не являются классами.

Есть и другие случаи, но в основном, если текущая функция называется someFunc и вызывается с синтаксисом a.someFunc(), тогда this будет таким же, как a.Вот работающий пример:

const someObject = {
    someFunc() {
       //Here, "this" will be the same as someObject, because of the way we called it
       someOtherFunction();

    }
};

someObject.someFunc();

function someOtherFunc() {
    //"this" is still someObject because it's inherited from the calling function which was not called using a method syntax
    x.y(); //inside the y() function, "this" will now be x
}

По сути, ИМХО, this - это разбитый беспорядок в Javascript и одна из ключевых причин, по которой я избегал использовать его везде, где это возможно.Это означает, что я не использую классы, и я получаю все, что мне нужно, от замыканий.

...