honey the codewitch Ответов: 1

Как перенести это определение функции в объявление C#?


var FollowEl = function(N, sets) {
  this.N = N;
  this.sets = sets;
};


Это глобальная функция в файле javascript .js. У него нет связанного с ним прототипа, поэтому я не могу легко перевести его в структуру или класс C#?

Я пытаюсь перенести его на C#, но не могу сказать, что означает "это", или если определение лучше рассматривать как класс или делегат, или что?

Если этого кода недостаточно, чтобы ответить на вопрос, пожалуйста, дайте мне знать, так как я знаю javascript только урывками. Я использую его, когда мне нужно, но мой фон-это C++ и C#

Что я уже пробовал:

Я не знаю, что попробовать, потому что я не могу сказать, что это такое? Является ли это делегатом в основном? что такое "это?"

Я думаю, что это в основном делегат, возвращающий кортеж с (N, sets), но я не могу быть уверен

1 Ответов

Рейтинг:
6

Richard Deeming

this это один из наиболее болезненных аспектов JavaScript. То, к чему он относится, будет зависеть от того, как и где вызывается функция.

Если вы просто позвоните FollowEl(x, s), затем this будет глобальным объектом. В браузере это было бы то же самое. window объект. NB: Это происходит независимо ни от чего this ссылается на вызывающую область.

FollowEl(x, s); // this === window

Если ты позвонишь FollowEl.call(foo, x, s), или FollowEl.apply(foo, [x, s]), затем this будет ссылаться на первый переданный аргумент.
var foo = { id: 42 };
FollowEl.call(foo, x, s); // this === foo
FollowEl.apply(foo, [x, s]); // this === foo

Если вы свяжете функцию с объектом, вы получите новую возвращенную функцию. Когда вы вызываете эту новую функцию, она будет вызывать исходную функцию, но с привязанным объектом как this.
var foo = { id: 42 };
var boundFn = FollowEl.bind(foo);
boundFn(x, s); // this === foo


Если вы пишете его как функцию стрелки, то она должна наследовать this из области вызова.
const FollowEl = (N, sets) => {
    this.N = N;
    this.sets = sets;
};

var foo = {
    id: 42,
    fn: function(N, sets){ 
        FollowEl(N, sets); 
    }
};

foo.fn(); // this === foo
Однако это, похоже, не работает для меня.

это - JavaScript | MDN[^]
Function.prototype.bind() - JavaScript | MDN[^]
Выражения функций со стрелками - JavaScript | MDN[^]
Область применения в JavaScript - Digital Web[^]


Короче говоря, вам понадобится гораздо больше контекста, прежде чем вы сможете преобразовать это в C#. :)


honey the codewitch

Большое спасибо. Я понял, что он делает, и преобразовал его в структуру, которая *должна* работать. *постучать по дереву*

Maciej Los

5ed!