JavaScript String Prototype возвращает объект [duplicate]

Вот некоторые подходы к работе с асинхронными запросами:
  1. Объект обезьяны браузера
  2. Q - A
  3. A + Promises.js
  4. jQuery отложен
  5. API XMLHttpRequest
  6. Использование концепции обратного вызова - как реализация в первом ответе

Пример: jQuery отложенная реализация для работы с несколькими запросами

var App = App || {};

App = {
    getDataFromServer: function(){

      var self = this,
                 deferred = $.Deferred(),
                 requests = [];

      requests.push($.getJSON('request/ajax/url/1'));
      requests.push($.getJSON('request/ajax/url/2'));

      $.when.apply(jQuery, requests).done(function(xhrResponse) {
        return deferred.resolve(xhrResponse.result);
      });
      return deferred;
    },

    init: function(){

        this.getDataFromServer().done(_.bind(function(resp1, resp2) {

           // Do the operations which you wanted to do when you
           // get a response from Ajax, for example, log response.
        }, this));
    }
};
App.init();
-1
задан user2770599 27 September 2014 в 09:47
поделиться

1 ответ

Потому что в вызове метода аргумент this всегда (в неаккуратном режиме) передается объекту. То, что вы видите, - это объект String, который был получен из примитивного строкового значения "test". Массив, на котором вы называете свой метод, уже является объектом, поэтому ничего не происходит, и вы просто получаете массив по-прежнему.

Если вы используете строгий режим, это приведение не происходит:

String.prototype.test = function() {
    "use strict";
    console.log(this);
};
var str = 'test';
str.test(); // logs "test"
3
ответ дан Bergi 26 August 2018 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: