Доступ к экземпляру из функции-прототипа, кроме как через "this", возможен? - PullRequest
0 голосов
/ 04 марта 2012
var dups = new Dups($("#el"))

function Dups($el) {
 this.value = 23
 $el.on("click", this.onClick)
}

Dups.prototype.onClick = function(){
// usually "this" inside here refers to the instance (Dups)
// but because jquery changes "this", inside here "this" refers to the clicked element
// how can I access the Dups instances "this.value" from here?
   alert(this.value) // does not alert 23
}

Моя проблема в функции Dups.prototype.onClick.Любые идеи, как элегантно получить доступ к экземплярам Dups «this», кроме передачи «this» (элемент, по которому щелкнули), так что «this» в prototype.onClick является желаемым, например:

...
$el.on("click", function(){this.onClick(this)})
....

Это работает, но мне интересно, есть ли лучший способ.

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Вы можете использовать jQuery.proxy, чтобы получить функцию, которая вызывает вашу функцию с привязкой this к вашему объекту ...

$el.on("click", $.proxy(this, 'onClick')
1 голос
/ 04 марта 2012

Вы можете использовать $.proxy в качестве переносимой реализации bind:

function Dups($el) {
    this.value = 23;
    $el.on("click", $.proxy(this.onClick, this));
}

$.proxy дает вам новую функцию, которая выполняется суказанный this:

jQuery.proxy (функция, контекст)
Возвращает: Функция

Описание: принимает функцию и возвращает новыйтот, который всегда будет иметь определенный контекст.

Стандартный метод bind для функциональных объектов делает то же самое (и более), но не доступен везде.

Тогда вымог получить выбранный элемент через переданный event, если вам это нужно:

Dups.prototype.onClick = function(event) {
    // event.target is what was clicked
}

Демо (откройте консоль, пожалуйста): http://jsfiddle.net/ambiguous/K2BuX/

...