Тема: User Objects...
Показать сообщение отдельно
  #9 (permalink)  
Старый 16.04.2008, 16:13
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

claster, вынеси определение bg выше вызова user_obj.bg.call(div);. А все дело в том, что функции могут объявляться как Statement и как Declaration.

Чтобы увидеть разницу, попробуй так:

a();// работает

function a() { 
  alert(1);
}


a();// не работает

var a = function() { 
  alert(1);
}


Поэтому вот это работает:

function UserObject() {
  this.color = 'blue';
  return true;
}

UserObject.prototype.bg = function() {
  this.style.backgroundColor = 'red';
  return true;
}

var div = document.createElement("DIV")
div.style.cssText = "width:100px;height:100px;border :1px solid blue;"
document.body.appendChild(div);
var user_obj = new UserObject();
user_obj.bg.call(div); // $1


И даже это работает (сам UserObject описан ниже всех, но он является декларацией, а не стейтментом):

UserObject.prototype.bg = function() {
  this.style.backgroundColor = 'red';
  return true;
}

var div = document.createElement("DIV")
div.style.cssText = "width:100px;height:100px;border :1px solid blue;"
document.body.appendChild(div);
var user_obj = new UserObject();
user_obj.bg.call(div); // $1

function UserObject() {
  this.color = 'blue';
  return true;
}


Но, в твоем случае - нет.
Ответить с цитированием