Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с методами (https://javascript.ru/forum/misc/27636-problemy-s-metodami.html)

(Sandr) 19.04.2012 21:05

Проблемы с методами
 
Приветствую!

Есть код:

function j(data) {
  //return new Operation(data); 
  if(!data.oper) {
    data.oper = new Operation(data);
  }
  return data.oper;
  
}
function Operation(data) {
  if(typeof(data) == 'object')
    this.obj = data;
  else
    this.obj = document.getElementById(data);
  this.stackClick = [];
  return this;
}
Operation.prototype = {
  click: function(func) {
	  var self = this;
	  this.stackClick.push(func);
	  if(!this.obj.onclick) this.obj.onclick = function() { self.startClick(); }
  },
  startClick: function() {
    for(var i = 0; i <= this.stackClick.length-1; i++) {
      this.stackClick[i]();
    }
  },
  spoiler: function(data) {
    var cObj = this.obj;
    var sObj = j(data['change']).obj;
    j(cObj).click(function() {
      sObj.style.display == 'none' ? sObj.style.display = 'block' : sObj.style.display = 'none';
    });
  }
}
window.onload = function() {
  j(document).click(function() { document.getElementById('q').innerHTML = Math.floor( Math.random() * (10 - 1 + 1) ) + 1; });  
  j(document).click(function() { document.getElementById('w').innerHTML = Math.floor( Math.random() * (10 - 1 + 1) ) + 1; });
  j('res').spoiler({change: 'q'});   
}


При запуске хром выдаёт следующее: "Uncaught TypeError: Cannot call method 'spoiler' of undefined".
Подскажите пожалуйста, в чём ошибка? Чем ему не нравится spoiler?

devote 19.04.2012 21:19

стринге нельзя добавить доп свойства:
var str = "her tam lisiy";
str.tratata = 'hehe';
alert(str.tratata);

(Sandr) 19.04.2012 21:38

devote, Maxmaxmахimus,
и как быть? Просто вообще никаких мыслей по поводу этого решения не возникает.

(Sandr) 19.04.2012 21:54

Maxmaxmахimus,
изменил первый пост. Теперь ваше сиятельство может помочь?

melky 19.04.2012 22:13

без переписывания функции-конструктора, передавай не строку как примитивное значение, а строку как объект.

написано об этом сверху

(Sandr) 19.04.2012 22:36

melky,
вы про это: j(new String('res')).spoiler({change: 'q'}); ?

melky 19.04.2012 22:45

да.

(Sandr) 19.04.2012 23:17

melky,
теперь выдаёт "Uncaught TypeError: Cannot read property 'obj' of undefined".
Да и к тому же этот вариант не очень подходит, я хочу, чтобы объёртка была как можно минимальней, а в данном случае приходится дописывать j(new String('res')).spoiler({change: 'q'}); .

melky 19.04.2012 23:41

тогда придется конструктор переписывать.

(Sandr) 20.04.2012 00:22

melky,
можете по подробнее рассказать? Какие изменения нужно сделать?


Часовой пояс GMT +3, время: 06:41.