prototype和document.getElementById()

时间:2010-09-13 20:29:37

标签: javascript oop prototype

为什么这不起作用?也许有人可以启发我:P

var balloon = function(){

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

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

我只是想更好地理解原型。

4 个答案:

答案 0 :(得分:2)

在没有wrapper元素的情况下,您的代码可能在DOM加载之前运行。

答案 1 :(得分:1)

只有在初始化对象后才允许

原型,因此请将代码更改为以下内容:

经过一些研究后我似乎错了,问题是在窗口加载之前使用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;
}

从上面你可以看到文档仅在窗口加载后才被使用

答案 2 :(得分:0)

也许你想尝试一下:

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();
}

答案 3 :(得分:0)

您发布的代码运行正常。你确定你的id是包装的元素吗?