gpt4 book ai didi

javascript - oo javascript 具有来自服务器的属性、来自缓存的方法,最佳实践?

转载 作者:行者123 更新时间:2023-11-28 02:50:51 25 4
gpt4 key购买 nike

我正在将程序 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(最坏情况)使用两个对象,一个用于属性(服务器生成),另一个用于方法。

感谢您对此事的任何启发,祝一切顺利

//汤姆·乔德

最佳答案

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

这行不通。 this 只有在函数中作为对象的方法调用或使用 new 运算符调用时才有意义。

如果您只是执行 myOb() 而不是 new myOb(),那么 this 将是全局的 (window) 对象并分配 this.serverTime 会有效地创建全局变量,这是您首先想要避免的。 (同样,如果没有函数的返回值,myCl 将是未定义。)

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

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>

how to append methods to initiated class or object?

使用内联函数表达式:

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

但是我不确定这真的能给你带来什么。 JavaScript 是一种混合脚本语言,您不必像 Java 那样思考并尝试将所有内容强制放入对象和类中。 (特别是因为您实际上并没有获得类(class),并且必须使用原型(prototype)来推出自己的类(class)。)

关于javascript - oo javascript 具有来自服务器的属性、来自缓存的方法,最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3794923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com