Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript prototype和document.getElementById()_Javascript_Oop_Prototype - Fatal编程技术网

Javascript prototype和document.getElementById()

Javascript 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

为什么这样不行?也许有人能启发我:P

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后运行。不太正确<代码>气球已由函数声明初始化<代码>原型在他拥有的地方很好。是的,我的错误是原型可以添加到对象中,而不管其状态如何,但只有在构建对象后才能访问。@这里,他确实说过。。“我只是想更好地理解原型。”