2012-06-14 24 views
1

我正在用Jquery编写一段长长的代码,正如你们都知道的那样,当它变得越来越复杂时,它看起来像一个简单的项目,现在看起来像一个无法处理的意大利面,功能和代码在各处重复。因此,我开始浇筑所有功能通过一个对象是这样的:Javascript中的OOP应该是什么样子?

function MyObject(container) { 
    this.container = container 
}; 

Notifications.prototype.featureOne = function (arg1, arg2){ 

}; 

Notifications.prototype.featureTwo = function (arg1, arg2, arg3){ 

}; 

obj1 = new Notifications($('#container')); 
obj1.featureOne('arg1', 'arg2'); 
obj1.featureOne('arg1', 'arg2', 'arg3'); 

显然,这使得它很简单,知道是怎么回事,但我发现我有一些代码非常相似,另一个(特别是AJAX函数接受2个参数,另一个接受相同的2个参数的ajax函数加上另外一个)。我能做什么?创建一个新的原型方法来创建一个函数来包装这两种情况?

另一个问题:在处理Javascript中的OOP时使用什么最佳实践?

谢谢!

+1

如果您希望看到一些正确的代码,请转到http://coffeescript.org->“尝试CoffeeScript”,然后键入'class Foo \ n \ n class Bar extends Foo'(用换行符替换\ n) - 但它可能会有点难以理解。 – Niko

+0

对不起,但我不知道CoffeeScript,所以现在这无助于我太多。 –

回答

1

原型继承是这样的。假设你有一个“班级”。

// original "class" 
var SomeObject = function(constructorArg1) { 
    this.someProperty = constructorArg1; 
}; 
SomeObject.prototype.method1 = function(arg1, arg2) { 
    // some code 
}; 

现在我们要创建一个继承方法1类,也增加了更多的说。

// new "class" which inherits from first "class" 
var SomeOtherObject = function(constructorArg1) { 
    this.someProperty = constructorArg1; 
}; 
// inheritance happens here 
SomeOtherObject.prototype = new SomeObject(); 
// must also set the constructor as part of prototypical inheritance 
SomeOtherObject.prototype.constructor = SomeOtherObject; 
// add a second method to your new "class" 
SomeOtherObject.prototype.method2 = function(arg1) { 
    // some code 
}; 

你会看到,该系统是不完美的,因为它不会让你继承原来的构造函数,不能调用父类的方法,如果他们被覆盖,但加入的原型所有方法第一个“班级”现在可以在新的“班级”中使用。

大约有100种方法可以玩这个想法来模拟经典继承,并且可以设置它的工作方式,可以从扩展类中调用覆盖的父方法等等。模拟经典继承不会使用原型继承,而只是简单地将方法从一个原型复制到另一个。你将不得不做一些搜索或试验,看看什么最适合你。

+1

不应该是'SomeOtherObject.prototype.constructor = SomeOtherObject;' – greut

+0

@gruet是的,谢谢。 – dqhendricks

相关问题