我发现自己用Javascript编写了一个大项目.我记得最后一次是冒险,因为hacky JS很快就变得难以理解,我希望这段代码干净利落.
好吧,我正在使用对象来构造一个lib,但是有几种方法可以在JS中定义东西,这意味着在范围,内存管理,名称空间等方面会产生重要影响.EEP:
var与否;(function(){...})()jquery样式中定义事物;this或不使用;function myname()或myname = function();那么在JS中用OO编码时,最佳实践是什么?
学术解释在这里真的很期待.链接到书籍热烈欢迎,只要他们处理质量和稳健性.
编辑:
有一些阅读,但我仍然对上述问题的答案和任何最佳实践非常感兴趣.
在JavaScript中声明本地(内部)函数时,有两个选项:
使用var关键字声明,分配给变量:
(function() {
var innerFunction1 = function() { ... };
innerFunction1();
}());
Run Code Online (Sandbox Code Playgroud)
仅使用function关键字声明,而不指定给变量:
(function() {
function innerFunction2() { ... };
innerFunction2();
}());
Run Code Online (Sandbox Code Playgroud)
我可以看到第二个的一个优点:函数可以在调用它的代码下面声明,因此更容易将私有函数与实际执行的代码分开.
哪个更好,为什么?
似乎有许多不同的方法在JavaScript中执行OO.
我喜欢:
function ClassA(){};
ClassA.prototype={
someFunc:function(a,b,c){},
otherFunc:function(){}
}
var c=new ClassA();
Run Code Online (Sandbox Code Playgroud)
并且从未使用过超出此功能的功能(尽管是一个熟练的OOer).我怀疑这是老式的,因为我经常看到新的闪烁变体,这让我想知道我是否选择了最好的方法.例如,你可以在构造函数方法中创建魔法来创建私有变量和访问器方法,我认为(直到最近)是不可能的.子类化怎么样?我不知道如何实现这一点,但它现在必须具有某种共同模式.
你是怎么做到的,为什么?
早上好,我正在从JavaScript的函数式编程方法转向面向对象的方法,并有一个问题.在函数式编程中,我可以在另一个函数示例中调用函数:
function a(){
// do something and when done call function b
b();
}
function b(){
// does more stuff
}
Run Code Online (Sandbox Code Playgroud)
既然我正在转向OOP方法,我将如何从同一对象中的另一个方法调用对象中的方法.例如:
var myClass = function(){
this.getData = function(){
//do a jquery load and on success call the next method
$('#a').load('file.asp',function(response,status,xhr){
switch(status){
case "success":
//THIS IS WHERE THE QUESTION LIES
this.otherfuntcion();
break;
}
}
}
this.otherfunction = new function(){
// does more stuff
}
}
p = new myClass();
p.getData();
Run Code Online (Sandbox Code Playgroud)
我可以说this.b()成功调用方法b还是我必须做其他事情?先感谢您.