1

我正在将程序 JS 转换为 OO,希望能提供任何帮助。简而言之,我拥有的是一个 html 页面,其中包含:

<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 等等......

我正在考虑的选项是:

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

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

感谢您在这件事上的任何启示,一切顺利

//汤姆乔德

4

2 回答 2

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

这行不通。this仅当函数作为对象上的方法或使用运算符调用时,它才有意义new

如果你只是做myOb()而不是new myOb(),那么this将是全局 ( window) 对象,并且分配this.serverTime有效地创建了全局变量,这是你一开始试图避免的。(同样没有函数的返回值,myCl将是undefined。)

由于您似乎并没有真正做任何需要多个实例或原型设计的事情,因此忘记该函数并只使用对象文字:

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 那样思考并尝试将所有内容强制转换为对象和类。(特别是因为您实际上并没有获得课程,并且必须使用原型制作自己的课程。)

于 2010-09-25T18:24:57.173 回答
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>

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

于 2010-09-25T19:31:45.290 回答