2010-09-25 59 views
1

我正在将程序JS转换为面向对象,并希望得到任何帮助。 概括地说,我有什么是包含HTML页面:从服务器的属性,缓存中的方法,最佳实践的JavaScript?

<script type="text/javascript"> 
    var serverTime='11:32:20'; //time generated by server (php) 
</script> 
<script scr="myProcFuncs.js" type="text/javascript"> 
    /* which is containing procedural functions such as 
    function getServerTime() {return window.serverTime;} 
    */ 
</script> 

我喜欢做的是清理,不增加通信量,或多或少...

<script type="text/javascript"> 
    function myOb() { 
    this.serverTime = '11:32:20'; 
    this.serverDate = '2010-09-24'; 
    } 
    //first question, need/recommended to create a class?? 
    var myCl = myOb(); 
</script> 
<script scr="myMethods.js" type="text/javascript"> 
    //second question, how to append methods to initiated class or object? 
</script> 

什么我要求的不仅是有效的,而且是OO-JS的最佳实践。也请海外商品会有延迟外部myMethods.js加载等等...

选项我concidering是:

  • §1,为例,方法添加到启动类(或静态对象,如果可能的话),如果是这样,请发布追加方法的例子。

  • §2(最坏情况)使用两个对象,一个用于属性(服务器生成),另一个用于方法。

感谢在这个问题上任何光线,万事如意

//汤姆·乔德

回答

0

现在解决了,(并修复了一些错别字...):

<script type="text/javascript"> 
    function myCl() { 
    this.serverTime = '11:32:20'; 
    this.serverDate = '2010-09-24'; 
    } 
    var myOb = new myCl(); 
</script> 
<script scr="myMethods.js" type="text/javascript"> 
    /* myMethods.js containing methods as.. 
    myOb.getTime = function() { 
    return this.serverTime; 
    } 
    */ 
</script> 

工程。如果有人知道更好的方法,请发布。

1
function myOb() { 
    this.serverTime = '11:32:20'; 

这是行不通的。 this只有在函数被调用为对象上的方法时才有意义,或者与new运算符一起使用。

如果你只是做myOb()代替new myOb(),然后this将是全球(window)对象和分配this.serverTime有效地创建全局变量,你试图避免在首位。 (也没有从函数返回值,myClundefined

既然你不真的似乎在做任何事情需要多个实例或原型,忘记了功能,只是使用对象文本:

var pageValues= { 
    serverTime: '11:32:20', 
    serverDate: '2010-09-24' 
}; 

您可以使用服务器端的JSON编码器轻松生成这样的代码。例如,如果你正在使用的服务器端语言是PHP:

<?php 
    $pageValues= array('serverTime'=>'11:32:20', 'serverDate'=>'2010-09-24'); 
?> 
<script type="text/javascript"> 
    var pageValues= <?php echo json_encode($pageValues); ?>; 
</script> 

如何追加的方法来启动类或对象?但是我不知道这真的让你什么

pageValues.someMethod= function() { 
    ...do something... 
}; 

使用内联函数表达式。 JavaScript是一种混合脚本语言,您不必像Java那样思考,并尝试将所有内容强制为对象和类。 (特别是因为你实际上没有上课,并且不得不使用原型制作你自己的版本。)

+0

关闭Bobince的帽子,为您的时间,知识和非常良好的布局答案! – Teson 2010-09-25 18:52:30

+0

你是对的,忘记'新'是一个错字。无论如何,根据http://www.crockford.com/javascript/inheritance.html(对象论证),可以将新方法分配给对象。但是再一次,马比不是这份工作的最佳工具。 – Teson 2010-09-25 18:56:39