2009-06-29 2 views

ответ

0

Вы должны обратиться к объекту:

test.a 
+0

Что связывает код с тем, что общий объект хранится в переменной, называемой «test». Это не хороший шаблон, поскольку тест является внешним по отношению к объекту. – AnthonyWJones

0

Добавить ссылку самостоятельной: -

var test = { 
    a: 3, 
    init: function() { 
     var self = this 
     $("body").click(function() { 
      alert(self.a); 
     }); 
    } 
}; 
+0

Это обычно работает, но будет работать, если: test.init.call (otherContext) – PatrikAkerstrand

+0

@Machine: true, но зачем вы хотите это сделать? Доступ к переменным за пределами объекта может работать, но это приводит к серьезным спагетти. Такая картина должна рассматриваться как плохой запах и по возможности избегать – AnthonyWJones

+0

Хорошо, это работает:

 var test = { a: 3, init: function() { var self = this; $("body").click(function() { test.doit(); }); }, doit: function() { var self = this; alert(self.a); } }; 
, но мне нужно повторно использовать функцию Doit, так что теперь это не работает:
 var test = { a: 3, init: function() { var self = this; $("body").click(self.doit); }, doit: function() { var self = this; alert(self.a); } }; 
как «это «в doit относится к $ (« body ») obj. идеи? – 2009-06-29 20:39:04

0

Хорошо, это работает:

 
var test = { 
    a: 3, 
    init: function() { 
     var self = this; 
     $("body").click(function() { 
      self.doit(); 
     }); 
    }, 

    doit: function() { 
     var self = this; 
     alert(self.a); 
    } 
}; 

, но мне нужно повторно использовать doit, так что теперь это не работает:

 

var test = { 
    a: 3, 
    init: function() { 
     var self = this; 
     $("body").click(self.doit); 
    }, 

    doit: function() { 
     var self = this; 
     alert(self.a); 
    } 

}; 
0

Ok, это фиксирует вторую проблему:

 
function test() { 
    var self; 
    return { 
     init: function() { 
      self = this; 
      $("body").click(this.doit); 
     }, 

     doit: function(data, b) { 
      alert(self.testing()); 
     }, 

     testing: function() { 
      return 4; 
     } 
    } 
} 


$(function() { 
    var x = test(); 
    x.init(); 
}); 

+2

Возможно, вам будет лучше прочитать SOFAQ. Пожалуйста, не добавляйте ответы, как если бы это был форум или NG. Просто уточните свой существующий ответ. – AnthonyWJones

2

На самом деле, я предпочитаю это: Это само установка и инициализация:

 

function createX() { 
    var self = { 
     init: function() { 
      $("body").click(this.doit); 
     }, 

     doit: function(data, b) { 
      alert(self.testing()); 
     }, 

     testing: function() { 
      return 4; 
     } 
    } 
    self.init(); 
    return self; 
} 


$(function() { 
    createX(); 
}); 

Смежные вопросы