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();
Потому что в вызове метода аргумент this
всегда (в неаккуратном режиме) передается объекту. То, что вы видите, - это объект String
, который был получен из примитивного строкового значения "test"
. Массив, на котором вы называете свой метод, уже является объектом, поэтому ничего не происходит, и вы просто получаете массив по-прежнему.
Если вы используете строгий режим, это приведение не происходит:
String.prototype.test = function() {
"use strict";
console.log(this);
};
var str = 'test';
str.test(); // logs "test"