我发现自己正在用Javascript编写一个大项目。我记得最后一个是相当冒险,因为黑客JS可以很快变得不可读,我希望这段代码是干净的。
好吧,我使用对象来构造一个库,但在JS中有几种方法来定义东西,这意味着在作用域、内存管理、名称空间等方面的重要结果。例句:
是否使用var;
在文件中定义东西,或者在(function(){…})()中定义东西,jquery风格;
用不用这个;
使用函数myname()或myname = function();
在对象主体中定义方法或使用“prototype”;
等。
那么,用JS编写面向对象代码的最佳实践是什么呢?
学术上的解释是很有必要的。热烈欢迎链接到书籍,只要他们处理质量和稳健性。
编辑:
有一些阅读资料,但我仍然对上述问题的答案和任何最佳实践非常感兴趣。
我要写下一些我读到的东西,或者自从我问了这个问题后,我申请的东西。所以读这本书的人不会感到沮丧,因为大多数答案都是RTMF的伪装(即使我必须承认,推荐的书是好的)。
变量用法
在JS中,任何变量都应该已经在较高的范围内声明过。所以当你想要一个新变量时,声明它以避免糟糕的惊喜,比如在不注意它的情况下操纵全局变量。因此,始终使用var关键字。
在对象make中,将变量private设为var。如果你只想声明一个公共变量,使用这个。My_var = my_value这样做。
声明方法
在JS中,有多种方法来声明方法。对于面向对象程序员来说,最自然也是最有效的方法是使用以下语法:
在对象体内部
this.methodName = function(param) {
/* bla */
};
这有一个缺点:内部函数将无法访问“this”,因为滑稽的JS作用域。Douglas Crockford建议使用一个名为“that”的传统局部变量来绕过这个限制。所以它变成了
function MyObject() {
var that = this;
this.myMethod = function() {
jQuery.doSomethingCrazy(that.callbackMethod);
};
};
不靠自动端线吗
JS尝试自动添加;如果你忘记了,就在这条线的尽头。不要依赖于这种行为,因为你会得到一堆错误,无法调试。
我要写下一些我读到的东西,或者自从我问了这个问题后,我申请的东西。所以读这本书的人不会感到沮丧,因为大多数答案都是RTMF的伪装(即使我必须承认,推荐的书是好的)。
变量用法
在JS中,任何变量都应该已经在较高的范围内声明过。所以当你想要一个新变量时,声明它以避免糟糕的惊喜,比如在不注意它的情况下操纵全局变量。因此,始终使用var关键字。
在对象make中,将变量private设为var。如果你只想声明一个公共变量,使用这个。My_var = my_value这样做。
声明方法
在JS中,有多种方法来声明方法。对于面向对象程序员来说,最自然也是最有效的方法是使用以下语法:
在对象体内部
this.methodName = function(param) {
/* bla */
};
这有一个缺点:内部函数将无法访问“this”,因为滑稽的JS作用域。Douglas Crockford建议使用一个名为“that”的传统局部变量来绕过这个限制。所以它变成了
function MyObject() {
var that = this;
this.myMethod = function() {
jQuery.doSomethingCrazy(that.callbackMethod);
};
};
不靠自动端线吗
JS尝试自动添加;如果你忘记了,就在这条线的尽头。不要依赖于这种行为,因为你会得到一堆错误,无法调试。