prototype и document.getElementById () - PullRequest
       6

prototype и document.getElementById ()

3 голосов
/ 14 сентября 2010

Почему это не работает? Может быть, кто-то мог бы просветить меня: P

var balloon = function(){

};
balloon.prototype.iHeight = document.getElementById("wrapper").clientHeight;

window.onload = function(){
    var oBalloon = new balloon();
}

Я просто пытаюсь понять прототип немного лучше.

Ответы [ 4 ]

2 голосов
/ 14 сентября 2010

Ваш код, вероятно, работает до загрузки DOM, когда нет элемента wrapper.

1 голос
/ 14 сентября 2010

прототипы разрешены только после инициализации объекта, поэтому измените ваш код следующим образом:

Кажется, что после некоторых исследований я ошибся, то, что проблема выглядит в том, чтовы используете document.* до загрузки окна, document.* доступно только после загрузки <body> в DOM.

, поэтому GetElementById() будет работать только после того, как фактический элемент вы пытаетесь выбратьнаходится внутри dom

var ById = function(i){return document.getElementById(i);}
var balloon = function(){}

window.onload = function(){
    //All elements have loaded now
    var oBalloon = new balloon();
    //The below code should work fine
    balloon.prototype.iHeight = ById("wrapper").clientHeight;
}

Сверху видно, что документ используется только после загрузки окна

0 голосов
/ 14 сентября 2010

Код, который вы разместили, работает нормально.Вы уверены, что у вас есть элемент с идентификатором обертка?

0 голосов
/ 14 сентября 2010

Может быть, вы хотите попробовать:

var balloon = function(){
};
balloon.prototype.iHeight = function(){ return document.getElementById("wrapper").clientHeight; }

Тогда вы можете позвонить позже, после загрузки DOM.

Вам это нужно в функции, потому что в противном случае JavaScript попытается вычислить значение во время определения.

window.onload = function(){
    var oBalloon = new balloon();
    var height = oBalloon.iHeight(); // iHeight would be undefined if you tried to calculate it earlier
}

Вы можете просто удалить метод-прототип и установить свойство в обработчике onload:

window.onload = function(){
    var oBalloon = new balloon();
    oBalloon.iHeight = document.getElementById("wrapper").clientHeight;
}

Тогда вы должны установить его только один раз, но также гарантируете, что DOM будет загружен и свойство к тому времени будет действительным.

То, что вы имели, эквивалентно:

var balloon = function(){};
var tmp = document.getElementById("wrapper").clientHeight; // at this point, this is not definted: tmp = undefined
balloon.prototype.iHeight = tmp; // undefined
window.onload = function(){
    var oBalloon = new balloon();
}
...