2016-10-27 5 views
0

Мне нравится новая стрелка ()=>{} синтаксис, и я бы хотел использовать его везде, где это возможно. Я знаю, что функция стрелки указывает на внешний этот контекс. Есть ли способ использовать функцию стрелки так же, как и нормальную функцию? Мне нужно только сделать this пунктами во внутреннюю часть функции стрелки.используя функцию стрелки, как обычную функцию

мне нужно сделать этот код:

let foo =() => { 
// "this" keyword should point to the inner of that function, not window object 
} 

работает как этот код:

function foo() { 
// "this" keyword points to the inner of that class/object/function/whatever-it-calls-fix-me-if-am-i-wrong 
} 

Является ли это достижимо или мне нужно придерживаться function ключевого слова?

Чтобы быть более конкретным, мне нужна вещь this, чтобы заставить ее работать с контроллером. Синтаксис в Angular, но это не главное. Это скорее вопрос JS, чем вопрос AngularJS.

+5

Нет. Вам необходимо использовать обычные функции. – SLaks

+0

«Это лексически фиксирует смысл этого» https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html – Korgrue

+0

Зачем вам это нужно? Второй код еще более декларативный (легче читать) и короче. – Bergi

ответ

-1

Как использовать функции Стрелки с библиотеками, которые используют этот

let _self = this; 
something.each(function() { 
    console.log(_self); 
    console.log(this); 
}); 

Ref: https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

+2

Обратите внимание, что источник, который вы цитируете **, не говорит «Как использовать функции стрелок с библиотеками, которые используют это». В нем говорится: «Совет: функции со стрелками с библиотеками, которые используют« это ». Кончик в основном предупреждает, что он не работает и говорит, что делать, а не использовать функцию стрелки. Вот почему приведенный вами пример не использует функцию стрелки. –

+0

Это абсолютно. Прокрутите вниз до пункта «Совет: функции со стрелками с библиотеками, которые используют это» - это, оказывается, часть скрипта, который я вытащил. – Korgrue

+0

Прочтите комментарий выше. –

1

Есть ли способ, чтобы использовать функцию стрелки, как и нормальную функцию? Мне нужно только сделать эти точки внутренней функцией стрелки.

Не разумно, нет. На самом деле, просто нет, период. :-) Используйте функцию function.

Не может работать, потому что функции стрелок закрываются над this. Это означает, что вызывающий абонент не может установить this, который вам нужен в нескольких ситуациях (например, функции на прототипах, обратные вызовы для таких библиотек, как jQuery, которые устанавливают this и т. Д.).

+0

Какие необоснованные решения вы подумали? Если нам позволено становиться необоснованными, 'toString' +' eval' может это сделать :-) – Bergi

+0

@Bergi: Первая необоснованная идея, которую я придумал, поняла, была бессмыслицей. После этого, да, я думал ** точно ** 'toString' +' eval' (возможно, с некоторым вмешательством) и решил не идти туда. :-) –

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