为什么这不起作用?也许有人可以启发我:P
var balloon = function(){
};
balloon.prototype.iHeight = document.getElementById("wrapper").clientHeight;
window.onload = function(){
var oBalloon = new balloon();
}
我只是想更好地理解原型。
答案 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是包装的元素吗?