Javascript中的OOP应该是什么样的?

时间:2012-06-14 16:33:03

标签: javascript oop

我正在使用Jquery编写一段很长的代码,众所周知,它似乎是一个简单的项目,当复杂性增长时,现在看起来像一个无法管理的意大利面条,其功能和代码遍布各处。因此,我开始将所有功能倾注在这样的对象上:

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个参数,另一个ajax函数接受与之前相同的2个参数加上另外一个一)。我能做什么?创建一个新的原型方法来创建一个函数来包装那两个案例吗?

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

谢谢!

1 个答案:

答案 0 :(得分: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种方法可以用这个想法来模拟经典继承,并且几乎可以设置它如何工作,能够从扩展类中调用覆盖的父方法等。许多方法模拟经典继承根本不使用原型继承,而只是简单地将方法从一个原型复制到另一个原型。您将不得不进行一些搜索或实验,以了解哪种方法最适合您。