Что делает «вернуть это» в функцию javascript?

Интересно, что делает «вернуть это» в функцию javascript, какова его цель? Предположим, что у нас есть следующий код:

Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; 

Что означает «вернуть это» внутри функции?

Я знаю, что делает код выше, и каково использование этого «ключевого слова». Я просто не знаю, что делает «return this» внутри функции.

  • Запуск приложения ASP.NET MVC 4 в режиме выпуска не связывает и не изменяет файлы js
  • Backbone.js - данные не заполняются в коллекции, хотя выборка выполнена успешно
  • Условие для последнего элемента массива с использованием шаблона handlebars.js
  • Как я могу использовать атрибут отсрочки сценария для пакетов ASP MVC 4 со скриптами. Render
  • Форматирование даты в JavaScript
  • Исключение строки javascript в java
  • Как получить значение выделенного текста в javascript
  • Сохранять переменную, используя сеансы
  • 4 Solutions collect form web for “Что делает «вернуть это» в функцию javascript?”

    Он ссылается на экземпляр объекта, на который в данный момент вызывается метод. Он используется для цепочки. Например, вы можете сделать что-то вроде этого:

     myObject.foo().bar(); 

    Поскольку foo возвращает this (ссылка на myObject ), на объект будет вызываться bar . Это то же самое, что делать

     myObject.foo(); myObject.bar(); 

    Но требует меньше ввода текста.

    Вот более полный пример:

     function AnimalSounds() {} AnimalSounds.prototype.cow = function() { alert("moo"); return this; } AnimalSounds.prototype.pig = function() { alert("oink"); return this; } AnimalSounds.prototype.dog = function() { alert("woof"); return this; } var sounds = new AnimalSounds(); sounds.cow(); sounds.pig(); sounds.dog(); sounds.cow().pig().dog(); 

    http://jsfiddle.net/jUfdr/

    Это означает, что метод вернет объект, к которому он принадлежит. Это может быть полезно, если вы хотите навести порядок команд следующим образом:

     MyObject.method1().method2().method3(); 

    Пример реального мира: jQuery

     $(this).addClass('myClass').hide(); 

    Tl; dr, возвращающий this из метода, является общим способом, позволяющим объединять методы.


    this относится к текущему контексту и изменяет значение в зависимости от того, как вы вызываете функцию.

    С вызовом функции this относится к глобальному объекту, даже если функция вызывается из метода, а функция принадлежит к тому же классу, что и метод, вызывающий его. Дуглас Крокфорд описал это как «ошибку в дизайне языка» [Crockford 28]

    При вызове метода this относится к объекту, на который вызывается метод.

    При применении вызова this относится ко всему, что вы установили при вызове apply.

    При вызове конструктора this относится к объекту, который создается для вас за кулисами, который возвращается при выходе из конструктора (если вы не ошибочно возвращаете свой собственный объект из конструктора).

    В приведенном выше примере вы создаете новый метод, называемый method который позволяет динамически добавлять функции и возвращает this , тем самым обеспечивая цепочку.

    Таким образом, вы можете сделать что-то вроде:

     Car.method("vroom", function(){ alert("vroom"); }) .method("errrk", function() { alert("errrk"); }); 

    и так далее.

    Он возвращает это, обычно это означает элемент html, который его вызвал, но «это» может иметь различные значения http://www.quirksmode.org/js/this.html

    Interesting Posts

    Angular2 – catch / subscribe to (click) событие в динамически добавленном HTML

    Есть что-то вроде готового события, когда изображение в html загружается и отображается?

    Как использовать LocalStorage для последнего значения выбора HTML

    Установить переменную в родительском окне из iframe

    Chrome MutationObserver для нового текста абзаца

    Конкатенация Javascript

    Handlebars.js: Как получить доступ к родительскому индексу в каждом вложенном?

    «Откройте последнюю закрытую вкладку», чтобы показать последний контент запроса ajax

    Плохая производительность с таблицами в стандарте Internet Explorer 8

    Холст HTML5 – перетаскивание текста на холсте

    Обновить всю страницу по запросу Ajax

    Действительно ли ECMAScript является диалектом Лиспа?

    Почему популярные сценарии JavaScript не обрабатывают синхронный асинхронный скрипт?

    Непрерывно прокручивать горизонтальный тикер, содержащий изображения в jQuery?

    Javascript, как удалить текст из строки

    JavaScript делает сайт умным, красочным и простым использованием.