var сам = это?

180
задан Steve Konves 29 April 2013 в 05:30
поделиться

4 ответа

Этот вопрос не характерен для jQuery, но характерен для JavaScript в целом. Базовая проблема состоит в том, как "направить" переменную во встроенных функциях. Это - пример:

var abc = 1; // we want to use this variable in embedded functions

function xyz(){
  console.log(abc); // it is available here!
  function qwe(){
    console.log(abc); // it is available here too!
  }
  ...
};

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

// we want to use "this" variable in embedded functions

function xyz(){
  // "this" is different here!
  console.log(this); // not what we wanted!
  function qwe(){
    // "this" is different here too!
    console.log(this); // not what we wanted!
  }
  ...
};

, Что мы можем сделать? Присвойте его некоторой переменной и используйте его через псевдоним:

var abc = this; // we want to use this variable in embedded functions

function xyz(){
  // "this" is different here! --- but we don't care!
  console.log(abc); // now it is the right object!
  function qwe(){
    // "this" is different here too! --- but we don't care!
    console.log(abc); // it is the right object here too!
  }
  ...
};

this не уникально в этом отношении: arguments другая псевдо переменная, которую нужно рассматривать тот же путь — путем искажения.

205
ответ дан Joris Tirado 23 November 2019 в 06:14
поделиться

Да, это, кажется, единый стандарт. Некоторые кодеры используют сам, другие используют меня. Это используется в качестве ссылки назад на "реальный" объект в противоположность событию.

Это - что-то, что взяло меня некоторое время для реального получения, это действительно выглядит нечетным сначала.

я обычно делаю это правильно наверху своего объекта (извините мой демонстрационный код - это более концептуально, чем что-либо еще и не является уроком по превосходному методу кодирования):

function MyObject(){
  var me = this;

  //Events
  Click = onClick; //Allows user to override onClick event with their own

  //Event Handlers
  onClick = function(args){
    me.MyProperty = args; //Reference me, referencing this refers to onClick
    ...
    //Do other stuff
  }
}
17
ответ дан BenAlabaster 23 November 2019 в 06:14
поделиться

Я не использовал jQuery, но в библиотеке как Прототип можно связать функции с определенным объемом. Таким образом с этим в памяти Ваш код был бы похож на это:

 $('#foobar').ready('click', this.doSomething.bind(this));

связывать метод возвращает новую функцию, которая называет исходный метод с объемом, который Вы определили.

3
ответ дан neonski 23 November 2019 в 06:14
поделиться

Я думаю, что это на самом деле зависит от того, что является Вами собирающийся делать в Вашем doSomething функция. Если Вы собираетесь получить доступ MyObject свойства с помощью этого ключевого слова тогда, необходимо использовать это. Но я думаю, что следующий фрагмент кода будет также работать, если Вы не сделаете никаких специальных вещей с помощью object(MyObject) свойства.

function doSomething(){
  .........
}

$("#foobar").ready('click', function(){

});
1
ответ дан Scott Harrison 23 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

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