Javascript 功能对象基础。如何超越简单的容器?
在上边我有点乐观,下边我被ADD弄得焦头烂额。如果我有一个简单的例子,符合我已经理解的,我就明白了。我希望这里有人能帮我弄到它 我有一个页面,每隔一段时间轮询服务器,处理数据,将其存储在对象中,并在div中显示。它使用全局变量,并输出到html中定义的div。我必须把它放到一个对象中,这样我才能创建多个实例,指向不同的服务器,并分别管理它们的数据 我的代码基本上是这样构造的 HTMLJavascript 功能对象基础。如何超越简单的容器?,javascript,function,object,syntax,attributes,Javascript,Function,Object,Syntax,Attributes,在上边我有点乐观,下边我被ADD弄得焦头烂额。如果我有一个简单的例子,符合我已经理解的,我就明白了。我希望这里有人能帮我弄到它 我有一个页面,每隔一段时间轮询服务器,处理数据,将其存储在对象中,并在div中显示。它使用全局变量,并输出到html中定义的div。我必须把它放到一个对象中,这样我才能创建多个实例,指向不同的服务器,并分别管理它们的数据 我的代码基本上是这样构造的 HTML <div id="server_output" class="data_div"></div&
<div id="server_output" class="data_div"></div>
我如何将其格式化为一个对象,其中全局变量定义为属性,成员函数(?)最好是在创建时构建自己的输出div,并返回对它的引用。所以我可以做一些像
dataOne = new MyDataDiv('http://address/?client');
dataOne.style.left = "30px";
dataTwo = new MyDataDiv('http://different/?client');
dataTwo.style.left = "500px";
var server = new ServerObject("http://some.net/address");
server.variable = newValue; // access object variables
我的代码实际上比这复杂得多,但我想如果我能理解这一点,我可以把它应用到我已经得到的东西上。如果我有什么要求,那是不可能的,请告诉我。我打算弄清楚这一点,而且会的。只要把问题打出来就可以帮助我的大脑更好地理解我到底想做什么
一如既往。。。任何帮助都是帮助
谢谢
跳过
更新:
我已经有了这个
$("body").prepend("<div>text</div>");
this.test = document.body.firstChild;
this.test.style.backgroundColor = "blue";
$(“正文”)。前置(“文本”);
this.test=document.body.firstChild;
this.test.style.backgroundColor=“蓝色”;
这是在代码中创建的div,以及可以返回的引用。将它粘贴到函数中,它就工作了
再次更新:
我用一个原型函数创建了可拖动的弹出窗口,并将其作为对象进行操作。这是我的建议。那是我的第一把小提琴!弹出窗口是我的项目的关键,据我所知,数据功能将很容易实现。这非常接近:
// globals
var pairs = {
{ div : 'div1', url : 'http://some.net/address?client=Some+Client' } ,
{ div : 'div2', url : 'http://some.net/otheraddress?client=Some+Client' } ,
};
var since_record_id; //?? not sure what this is
var intervals = [];
// window onload
window.onload(){ // I don't think this is gonna work
for(var i; i<pairs.length; i++) {
getRecent(pairs[i]);
intervals.push(setInterval(function(){
pollForNew(map[i]);
}, 300000));
}
}
function getRecent(map){
var url = map.url + '&recent=20';
// do stuff here to retrieve the resource
var content = loadResoucrce(url); // must define this
var elt = document.getElementById(map.div);
elt.innerHTML = content;
}
function pollForNew(map){
var url = map.url + '&since_record_id=' + since_record_id;
var content = loadResoucrce(url); // returns an html fragment
var elt = document.getElementById(map.div);
elt.innerHTML = content;
}
但是对于
d1
和d2
,你能做的不多。您可以调用cancel()停止更新。我想你可以添加更多的函数来扩展它的功能。好的,找到我需要的。这很直截了当
首先,忽略window.onload,该对象被定义为一个函数,当您实例化一个新对象时,它将运行该函数。在函数中执行设置
其次,对于希望使对象成为局部的全局变量,只需将它们定义为this.variable\u name对象内的代码>。这些变量在整个对象及其成员函数中可见
第三,将成员函数定义为object.prototype.function=function(){}代码>
第四,对于我的例子,对象函数应该返回这个代码>这允许常规程序流使用点符号检查对象的变量
这就是我一直在寻找的答案。它接受我的非函数示例代码,并将其作为对象重新打包
function ServerObject(url){
// global to the object
this.server_url = url;
this.data = new Object();
this.since_record_id;
this.interval_id;
// do the onload functions
this.getRecent();
this.interval_id = setInterval(function(){
this.pollForNew();
}, 300000);
// do other stuff to setup the object
return this;
}
// define the getRecent function
ServerObject.prototype.getRecent = function(){
// do getRecent(); stuff
// reference object variables as this.variable;
}
// same for pollForNew();
ServerObject.prototype.pollForNew = function(){
// do pollForNew(); stuff here.
// reference object variables as this.variable;
}
然后在你的程序流程中,你会做一些像
dataOne = new MyDataDiv('http://address/?client');
dataOne.style.left = "30px";
dataTwo = new MyDataDiv('http://different/?client');
dataTwo.style.left = "500px";
var server = new ServerObject("http://some.net/address");
server.variable = newValue; // access object variables
我在第一篇文章中提到了这个插件。我很聪明,知道物体有多复杂,当我寻找例子和解释时,它们会暴露出某些复杂的层次,这些复杂的层次会让我的大脑游动。很难深入到让你从底层开始的简单规则。“这个”的范围是什么?当然,总有一天我会明白的,但简单的事实是,你必须引用“这个”
谢谢
我希望我能提供更多
Skip你说“我不知道你为什么想要一个这么简单的任务。”这只是一个简单的例子,它们将是可拖动的弹出窗口,单独的推特流。他们将管理自己的拖动功能,并完全自主于其他页面活动。事实上,我有一个非常棒的推特栏目。现在我只想说“新”。就像我前面说的,如果我能把头脑放在简单的东西上,我就能把它扩展到复杂的东西上。那就行了。getRecent()
和pollForNew()
不会被公开调用,因此它们可以是私有的var函数。这样定义的话,他们就不能引用this
来访问成员属性(如interval或div等)。您需要的任何其他公共成员函数都应该添加到原型中,正如我为cancel()
所示。它们可以引用此
。定义私有函数中的所有内容,以保持全局命名空间干净。祝你好运。我看到你在定义对象中内联函数的逻辑,这就是我要做的因为pollForNew()使用了_记录_id
代码>。从我发布的答案中可以看出,我只是在寻找最简单的对象语法。我们都得从某个地方开始。:)谢谢你的意见。
var server = new ServerObject("http://some.net/address");
server.variable = newValue; // access object variables