Javascript prototype和document.getElementById()
为什么这样不行?也许有人能启发我:PJavascript prototype和document.getElementById(),javascript,oop,prototype,Javascript,Oop,Prototype,为什么这样不行?也许有人能启发我:P var balloon = function(){ }; balloon.prototype.iHeight = document.getElementById("wrapper").clientHeight; window.onload = function(){ var oBalloon = new balloon(); } 我只是想更好地理解prototype。您的代码可能是在DOM加载之前运行的,当时没有包装器元素。您可能想试试: va
var balloon = function(){
};
balloon.prototype.iHeight = document.getElementById("wrapper").clientHeight;
window.onload = function(){
var oBalloon = new balloon();
}
我只是想更好地理解prototype。您的代码可能是在DOM加载之前运行的,当时没有
包装器
元素。您可能想试试:
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
}
您可以完全废弃prototype方法,并在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();
}
你发布的代码运行良好。您确定有id为wrapper的元素吗 仅在对象初始化后才允许使用原型,因此请将代码更改为以下内容: 似乎在一些研究之后我错了,问题是在加载窗口之前使用
document.*
,document.*
仅在
加载到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;
}
从上面可以看出,文档只有在窗口加载后才被使用,这是因为您的代码可能在加载DOM之前运行。您的代码工作正常,但需要在加载DOM后运行。不太正确<代码>气球已由函数声明初始化<代码>原型在他拥有的地方很好。是的,我的错误是原型可以添加到对象中,而不管其状态如何,但只有在构建对象后才能访问。@这里,他确实说过。。“我只是想更好地理解原型。”