Как мне связать «это» в теле функции в IE-8 Javascript? - PullRequest
2 голосов
/ 13 февраля 2012

Я занимаюсь кросс-браузерным тестированием. Изначально я использовал ключевое слово bind () в ECMAScript 5 .Это не доступно в IE8.В качестве обходного пути я использую код из Yehuda Katz.Его сайт предлагает использовать функцию полезности вместо bind (), когда bind не существует - он не существует в IE 8.

http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/

   var bind = function (func, thisValue) {
           return function () {
                   return func.apply(thisValue, arguments);
           }
   }

В попыткечтобы использовать его, я получаю исключение, где он говорит «func.apply».Я не передаю функцию, я передаю объект, поэтому apply () там нет.Хорошо.Но теперь я снова застрял и вернулся к квадрату 1. Как связать переменную "this" с телом функции?

Резюме: Как связать переменную "this" с телом функции?

<snip>

    MyView.prototype.OnSlider_Change = function (event, ui) {
           this.viewModel.setVariableX(ui.value * 100.0);
    }

<snip>

    $("#Slider").slider({
                   slide: (this.OnSlider_Change).bind(this),
                   change: (this.OnSlider_Change).bind(this)
           });

стал

   $("#Slider").slider({
           slide: bind(this, this.OnSlider_Change),
           change: bind(this, this.OnSlider_Change)
   });

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

С jquery вы можете использовать прокси-метод , который реализует то, что делает ваш метод привязки.

$("#Slider").slider({
    slide: $.proxy(this.OnSlider_Change, this),
    change: $.proxy(this.OnSlider_Change, this)
});
2 голосов
/ 13 февраля 2012

Вы просто неправильно указали порядок аргументов для этой прокладки:

       slide: bind(this.OnSlider_Change, this),
       change: bind(this.OnSlider_Change, this)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...