2010-03-26 2 views
2

Для начала я даже не уверен, что это правильный способ сделать это.Java-script object - получить имя переменной

Скажем, у меня есть скрипт (JQuery включен), как это:

foo = function() { 

    this.bar = function() { 
    alert('I\'m bar'); 
    } 

    this.test = function() { 
    $('body').append('<a onclick="my_var.bar();">Click me</a>'); 
    } 

this.test(); 

} 

var my_var = new foo(); 

Есть ли способ, я мог бы сделать переменную «my_var» динамический внутри функции «Foo». Так что я мог бы сделать что-то вроде

$('body').append('<a onclick="'+the_variable_which_im_assigned_to+'.bar();">Click me</a>'); 

Спасибо

// Edit:

Я извиняюсь, если я не был достаточно ясен, потому что я не совсем уверен, что я Я пытаюсь сделать сам.

Моя цель состоит в том, чтобы заменить линию

$('body').append('<a onclick="my_var.bar();">Click me</a>'); 

с

$('body').append('<a onclick="'+what_ever_should_go_here+'.bar();">Click me</a>'); 

Так что, когда я называю

var my_var = new foo(); 
var your_var = new foo(); 
var our_var = new foo(); 

Я мог бы вызывать функции внутри каждого объекта (после того, как они присоединять что-то в тело документа).

+0

Что вы имеете в виду? – SLaks

+0

Я не думаю, что ясно, что вы пытаетесь сделать? – scunliffe

ответ

1

Кроме переключение из обработчика событий рядных, вам нужно использовать closure, чтобы получить доступ к экземпляру Foo внутри обработчика.

function Foo() { 
    var self = this; 
    this.test = function() { 
     $('body').append(
      $('<button>something</button>').click(function() { 
       self.bar(); return false; 
     })); 
    } 
} 
+0

Спасибо, что сработало. Я делал это полностью. – Mikk

+0

Кодировка кода SLaks (объединение всех вызовов) более чистая, чем моя. Используйте 'self' и обработчик кликов, но используйте его' click (...). AppendTo (...) '. Обратите также внимание на то, что кнопка может иметь больше смысла, чем ссылка, но при этом нажимает на пользователя, чтобы щелкнуть ее (без необходимости «нажимать на меня»), в зависимости от точной цели элемента. – outis

2

Вы должны использовать анонимные функции обработчика вместо встроенных событий, как это:

$('<a href="#">Click Me</a>') 
    .click(function() { my_var.bar(); return false; }) 
    .appendTo('body'); 
0

Если это общий план, который вы хотите/нужно использовать, чтобы присоединить обработчик событий, да, отправить в имя из переменная в функцию, которая относится к foo:

foo = function(name_of_the_variable_which_im_assigned_to) { [...] }; 
Смежные вопросы