基本Javascript和html对象执行
这是一个基本程序,我不明白为什么它不起作用: 对象类houseObject.js:基本Javascript和html对象执行,javascript,html,object,Javascript,Html,Object,这是一个基本程序,我不明白为什么它不起作用: 对象类houseObject.js: var string; function createSentence(paragraph){ this.string = paragraph; } function getString(){ return string; } 用于运行的程序: <!DOCTYPE html> <html> <head>
var string;
function createSentence(paragraph){
this.string = paragraph;
}
function getString(){
return string;
}
用于运行的程序:
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src="houseObject.js"></script>
<script>
var temp = new createSentence("hello world");
var string = temp.getString();
var para=document.createElement("p");
var node=document.createTextNode(string);
para.appendChild(node);
</script>
</head>
<body>
<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>
<script>
var element=document.getElementById("div1");
element.appendChild(para);
</script>
</body>
</html>
在html的head部分中。是因为html是一个脚本程序,它还没有阅读正文部分吗
提前谢谢你说得对。HTML文档按顺序读取,找到后执行JS代码。内部的脚本无法访问内部的节点,因为它们尚未被读取。您是正确的。HTML文档按顺序读取,找到后执行JS代码。内部的脚本无法访问内部的节点,因为它们尚未被读取。恐怕您还没有完全掌握Javascript中对象的工作原理。this.name与全局定义的名称不同。阅读有关Javascript中对象的更多信息,请访问 恐怕您还没有完全掌握Javascript中对象的工作原理。this.name与全局定义的名称不同。阅读有关Javascript中对象的更多信息,请访问 您可以构建一个构造函数来取回对象:
var Sentence = function (text) {
this.text = text;
};
现在如果你这样做了
var obj = new Sentence("Hello World");
您有一个obj instanceof语句,可以访问如下属性
console.log(obj.text); // prints Hello World
将其附加到DOM元素是另一个巨大的答案。了解为什么直接在DomeElement上引用对象是危险的。也许您应该先创建一个数组或另一个对象来存储id/对象元组:
var list = [ obj0, obj1 ];
var keyValueStore = { "key0": obj0, "key1" : obj1 };
进一步扩展构造函数及其对象实例:
var Sentence = function (text) {
this.para = document.createElement("p");
this.setText(text);
};
Sentence.prototype.setText = function (text) {
if (this.node) {
this.para.removeChild(this.node);
}
this.node = document.createTextNode(text);
this.para.appendChild(this.node);
};
Sentence.prototype.getText = function () {
if (this.node) {
if (!this.node.textContent) {
// typical IE hack
return this.node.innerText;
}
return this.node.textContent;
}
};
用法:
window.onload = function () {
var sentence0 = new Sentence("Hello World");
document.body.appendChild(sentence0.para);
setTimeout(function () {
sentence0.setText("I'm Edward!");
}, 5000);
};
FIDLE:JSFIDLE会自动包装window.load处理程序。您可以构建一个构造函数来取回对象:
var Sentence = function (text) {
this.text = text;
};
现在如果你这样做了
var obj = new Sentence("Hello World");
您有一个obj instanceof语句,可以访问如下属性
console.log(obj.text); // prints Hello World
将其附加到DOM元素是另一个巨大的答案。了解为什么直接在DomeElement上引用对象是危险的。也许您应该先创建一个数组或另一个对象来存储id/对象元组:
var list = [ obj0, obj1 ];
var keyValueStore = { "key0": obj0, "key1" : obj1 };
进一步扩展构造函数及其对象实例:
var Sentence = function (text) {
this.para = document.createElement("p");
this.setText(text);
};
Sentence.prototype.setText = function (text) {
if (this.node) {
this.para.removeChild(this.node);
}
this.node = document.createTextNode(text);
this.para.appendChild(this.node);
};
Sentence.prototype.getText = function () {
if (this.node) {
if (!this.node.textContent) {
// typical IE hack
return this.node.innerText;
}
return this.node.textContent;
}
};
用法:
window.onload = function () {
var sentence0 = new Sentence("Hello World");
document.body.appendChild(sentence0.para);
setTimeout(function () {
sentence0.setText("I'm Edward!");
}, 5000);
};
Fiddle:JSFIDLE会自动包装window.load处理程序。好的,如果您使用对象,请使用Prototype,如下所示:
function createSentence(paragraph){
this.paragraph = paragraph;
}
createSentence.prototype.getString = function(){
alert(this.paragraph);
//Or return this.paragraph
}
var string_1 = new createSentence('my sentence');
var string_2 = new createSentence('another sentence');
string_1.getString();
//Will return 'my sentence'
string_2.getString();
//Will return 'another sentence'
好的,如果您正在使用对象,请使用Prototype,如下所示:
function createSentence(paragraph){
this.paragraph = paragraph;
}
createSentence.prototype.getString = function(){
alert(this.paragraph);
//Or return this.paragraph
}
var string_1 = new createSentence('my sentence');
var string_2 = new createSentence('another sentence');
string_1.getString();
//Will return 'my sentence'
string_2.getString();
//Will return 'another sentence'
为了更快的加载和更好的性能,你可以把所有的JS放在EndBody标签的前面。当您将脚本放入head时,元素div1还不存在。将脚本放在HTML的末尾,或者。@metadings,哦,我做了,我在正文部分的末尾之前做了另一个脚本部分,使用jQuery时您会感觉更舒服-使用jQuery还消除了关于attachEvent/addEventListener、按id选择元素的麻烦,类和其他怪癖为了更快的加载和更好的性能,你可以把所有的JS放在body标签的前面。当您将脚本放入head时,元素div1还不存在。将脚本放在HTML的末尾,或者。@metadings,哦,我做了,但我在正文部分的末尾之前做了另一个脚本部分。使用jQuery时,您会感觉更舒服-使用jQuery还消除了关于attachEvent/addEventListener的头痛,按id、类和其他怪癖选择元素