2013-07-26 2 views
-1

У меня есть два JavaScript классов какэффективный способ наследования Javascript

class1 = function(opt) { 
     function abc() { 
     } 
     function def() { 
     } 
     function xyz() { 
     } 
}; 


class2 = function(opt) { 
      function abc() { 
      } 
      function def() { 
      } 
      function lmn() { 
      } 
    }; 

Эти два класса содержат некоторые общие методы, такие как (ABC, DEF) и некоторые специфические методы, такие как (LMN, хуг). Может ли кто-нибудь предложить мне, как эффективно применять наследование к этой ситуации, чтобы я мог иметь общие методы в одном файле и конкретные методы в соответствующих файлах. Я пробовал прототип метода, но это не работает. Так есть и другой способ. Спасибо.

+2

Пожалуйста, покажите нам, как эти функции "методы" из "классов". В настоящее время они представляют собой лишь частные функции внутри других функций, и их перемещение в единую область может решить проблему. Пожалуйста, также покажите метод прототипа, который вы пробовали, затем мы можем помочь вам более конкретно в ваших ошибках. – Bergi

ответ

0

Javascript не имеют классы

Но вы можете систематизировать ваше наследство code.Javascript полностью отличается от Кете языков OOP.

Здесь мы используем прототипы и конструкторы.

** прототип ==> ** Проще говоря, я привык для расширения цели

** Конструкторы ==> ** я использовал для создания нескольких функций instances.Any может быть использован в качестве конструктора используя новое ключевое слово.

Только образцы кодов для понимания.

ОБРАЗЕЦ 1: с помощью объекта буквального

var Myobject = { 

    Function_one: function() 
    { 
     //some code 
     Myobject.function_three(); 
    }, 
    Function_two: function() 
    { 
     //some code 
     Myobject.function_three();//lets say i want to execute a functin in my object ,i do it this way... 
    }, 
    Function_three: function() 
    { 
     //some code 
    } 
}; 

window.onload = Myobject.Function_one //this is how you call a function which is in an object 

SAMPLE 2: С помощью Prototype

function function_declareVariable() 
{ 
    this.a= 10; //i declare all my variable inside this function 
    this.b= 20; 
} 

function_declareVariable.prototype.Function_one = function() 
{ 
    //some code 
    Myobject.Function_three(); 
}; 

function_declareVariable.prototype.Function_two = function() 
{ 
    Myobject.Function_three(); 
}; 

function_declareVariable.prototype.Function_three = function() 
{ 
    alert(Myobject.a or Myobject.b) 
    //some code 
}; 

var Myobject = new function_declareVariable();//this is how i instantiate 

REFER 1:what are constructors ,prototypes

REFER 2:prototypal inheritance

0

В зависимости от того, как эти классы просто разделяют поведение (интерфейс) или фактически являются подклассами общего класса, вы должны использовать либо микширование, либо прототипное наследование соответственно.

Пример для прототипов:

function BaseClass() { 
} 

BaseClass.prototype = { 
    abc: function() { 
    }, 

    def: function() { 
    } 
}; 

function class1() { 
} 

class1.prototype = new BaseClass(); 

class1.prototype.xyz = function() { 
}; 

function class2() { 
} 

class2.prototype = new BaseClass(); 

class2.prototype.lmn = function() { 
}; 

И пример Mixins:

function BaseMixin (object) { 
    object.abc = BaseMixin.prototype.abc; 
    object.def = BaseMixin.prototype.def; 
} 

BaseMixin.prototype = { 
    abc: function() { 
    }, 

    def: function() { 
    } 
}; 


function class1() { 
    BaseMixin(this); 
} 

class1.prototype = { 
    xyz: function() { 
    } 
}; 

function class2() { 
    BaseMixin(this); 
} 

class2.prototype = { 
    lmn: function() { 
    } 
}; 
Смежные вопросы