Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   помогите понять (https://javascript.ru/forum/events/28787-pomogite-ponyat.html)

devote 02.06.2012 21:42

Цитата:

Сообщение от cyber
и в качестве this в myfunc будет использоваться обьект proxyMyfunc я правильно понял?=)

нет, не правильно. передастся контекст тот же что использует функция proxyMyfunc но не сама функция

cyber 02.06.2012 21:47

Цитата:

Сообщение от devote (Сообщение 178348)
нет, не правильно. передастся контекст тот же что использует функция proxyMyfunc но не сама функция

а теперь?=)

function fnc (){
      
      alert(this.t)
      }
      
      (function ()
      {
      this.t = "ну и олень";
      fnc.apply(this, arguments)
      
      }());

devote 02.06.2012 21:58

Цитата:

Сообщение от cyber
а теперь?=)

ну и теперь и вы передаете контекст, но контекст скорее всего равен объекту window:
function fnc() {
    alert( "Наш контекст внутри функции fnc: " + this );
    alert(this.t);
}
       
(function () {
    alert( "Наш контекст внутри безымянной функции: " + this );

    this.t = "ну и олень";
    fnc.apply( this, arguments );
}());
Другой вариант:
function fnc() {
    alert( "Наш контекст внутри функции fnc: " + this );
    alert(this.t);
}
       
(function () {
    alert( "Наш контекст внутри безымянной функции: " + this );

    var context = {
        t: "ну и олень"
    };

    fnc.apply( context, arguments );
}());

cyber 02.06.2012 22:12

Цитата:

Сообщение от devote (Сообщение 178352)
ну и теперь и вы передаете контекст, но контекст скорее всего равен объекту window:
function fnc() {
    alert( "Наш контекст внутри функции fnc: " + this );
    alert(this.t);
}
       
(function () {
    alert( "Наш контекст внутри безымянной функции: " + this );

    this.t = "ну и олень";
    fnc.apply( this, arguments );
}());
Другой вариант:
function fnc() {
    alert( "Наш контекст внутри функции fnc: " + this );
    alert(this.t);
}
       
(function () {
    alert( "Наш контекст внутри безымянной функции: " + this );

    var context = {
        t: "ну и олень"
    };

    fnc.apply( context, arguments );
}());

а теперь дошло
var user = {
  log: function() {
logService.add.apply(logService, arguments);
  }
}

var logService = {
  add: function() {
    alert( this.format(arguments) );
  },

вместо this тут logService и вызывается его метод format ,а в качестве аргументов передаются аргументы переданные user.log
format: function(args) {
    return [].join.call(args, ' ');
  }
}

user.log("Вася", "сказал", "что-то умное..");

devote 02.06.2012 22:36

Цитата:

Сообщение от cyber
вместо this тут logService и вызывается его метод format ,а в качестве аргументов передаются аргументы переданные user.log

верно

cyber 02.06.2012 22:43

Цитата:

Сообщение от devote (Сообщение 178364)
верно

спасибо за то что помогли разобратся:thanks:

cyber 02.06.2012 23:38

еще один вопросик возник подскажите как устроен метод sort
смотрел тут но что то не нашел https://developer.mozilla.org/en/Jav...cts/Array/sort

melky 02.06.2012 23:48

Цитата:

Сообщение от cyber (Сообщение 178372)
еще один вопросик возник подскажите как устроен метод sort
смотрел тут но что то не нашел https://developer.mozilla.org/en/Jav...cts/Array/sort

Т.е. алгоритм работы? Да тысячи их.
Точно сказать можно, только взглянув на исходный код этого метода.

cyber 02.06.2012 23:51

Цитата:

Сообщение от melky (Сообщение 178373)
Точно сказать можно, только взглянув на исходный код этого метода.

мне именно он и нужен , тот который браузер использует когда вызвается sort

cyber 02.06.2012 23:56

вот к примеру таже статья ссылку на которую я давал в начале поста, там приведен пример join
function join(separator) {
  if (!this.length) return '';

  var str = this[0]; 

  for (var i = 1; i<this.length; i++) {
    str += separator + this[i]; 
  }
  
  return str;
}

или автор сам писал этот код исходя из спецификации?


Часовой пояс GMT +3, время: 12:34.