2015-08-06 2 views
3

Я читал о наследовании в Javascript и придумал создание конструкторов и определение каждого прототипа конструкторов. Я создал функцию prototypeExtend, которая будет проходить через каждый прототип конструкторов и добавлять их в прототипы основных конструкторов.Наследование Javascript с использованием прототипа, что является практическим способом?

Это практический способ достижения наследования?

function prototypeExtend() { 
    var cMain = arguments[0].prototype; 
    for(var i=1; i<arguments.length; i++){ 
     var cTemp = arguments[i].prototype; 
     for(var k in cTemp){ 
      if(cTemp.hasOwnProperty(k)){ 
       cMain[k] = cTemp[k]; 
      } 
     } 
    } 
    return cMain; 
} 

function Class1() {} 
Class1.prototype = { 
     el1:null, 
     fun1:function(str){ 
      console.log(str + " from Class1"); 
     }, 
     setEl1:function(value){ 
      this.el1 = value; 
     }, 
     getEl1:function(){ 
      return this.el1; 
     } 
} 

function Class2(){} 
Class2.prototype = { 
     el2:"blah", 
     fun2:function(str){ 
      console.log(str + " from Class2"); 
     } 
} 

function Class3(){} 
Class3.prototype = { 
     el3:"dah", 
     fun3:function(str){ 
      console.log(str + " from Class3"); 
     }, 
     fun1:function(str){ 
      console.log(str + " from Class3"); 
     } 
} 
prototypeExtend(Class2, Class1, Class3); 
var obj = new Class2; 
console.log(obj); 
+0

Это может оказаться вопросом мнения. Для меня: нет очень много способов сделать для читаемого кода. Вот почему многие инструменты JS, такие как Dojo, добавляют более совершенную систему набора текста. Моим любимым, однако, является язык сшитого языка TypeScript (http://www.typescriptlang.org/) – Katana314

ответ

1

В этом состоянии , Я могу думать о чем-то, чего вы, возможно, не видели. Вы даете значения по умолчанию свойствам объектов непосредственно в описании прототипа. Помните, что объекты (и функции) будут передаваться по ссылке, поэтому эти свойства будут static, если я могу обратиться к Java. Любое изменение объекта будет влиять на все другие ссылки.

Вам также придется изменить свой код, когда вам нужно переопределить функции, и по-прежнему использовать родительский.

Если ваша цель - создать свою собственную библиотеку, тогда помните об этом и продолжайте! ;) В любом случае, вы должны взглянуть на то, что другие делают в Интернете. Я лично использовал classjs, и он сделал эту работу для меня!

0

Вот хорошие примеры прототипичный против функционального inherritance

http://artandlogic.com/2012/07/prototypal-vs-functional-inheritance-in-javascript/

Это, как представляется, на основе очень мнение вопрос так что нет ничего плохого или вправо. Мне лично нравится прототипный подход.

EDIT1: Также проверьте Дуглас Крокфорд - он имеет свою собственную реализацию и является Java-гуру многие люди следуют

http://javascript.crockford.com/prototypal.html

Я надеюсь, что это указал вам в правильном направлении

Смежные вопросы