2012-04-05 6 views
0

Как я могу наследовать с помощью этого примера.Как сделать прототипное наследование в этом случае?

Я пытаюсь создать объектный литерал, который функционирует как одиночный. В этом я хотел бы извлечь уроки. Кроме того, эти классы должны наследовать друг от друга, когда это применимо.

Как так:

var Singleton = { 

    car: function() { 
     this.engine= true; 
    }, 

    ford: function() { 
     this.color = 'red'; 
    } 
}; 

Я хотел бы, чтобы брод наследоваться от бара, но я не могу это сделать:

ford: function() { 
     this.color = 'red'; 
     this.prototype = new this.car(); 
    } 

Есть идеи?

+1

Для начала, используйте конструктор вместо литералов объектов. –

+0

[Шаблоны наследования JavaScript] (http://bolinfest.com/javascript/inheritance.php). –

+0

Что именно вы подразумеваете под «bar inherit from foo»? Будут ли foo и bar использоваться как конструктор с 'новыми' вызовами? – Phrogz

ответ

2
var Something = { 

    foo: function() { 
     this.greet = 'hello'; 
    }, 
    bar: function() { 
     this.color = 'blue'; 
    } 
}; 

Something.bar.prototype = new Something.foo(); 
alert((new Something.bar()).greet) 

Вот грунтовка на inheritance

+0

Это делает именно то, что я хочу. Большое спасибо! – Kriem

1

Если вы пытаетесь сделать bar INHERIT свойства foo, то вы могли бы сделать что-то вроде этого (обратите внимание, что этот способ не будет иметь свойства прототипа унаследовал хотя):

var Something = { 
    foo: function() { 
     this.greet = 'hello'; 
    }, 
    bar: function() { 
     Something.foo.call(this); 
     this.color = 'blue'; 
    } 
}; 

И затем использовать его как это:

var bar = new Something.bar(); 
bar.color // blue 
bar.greet // hello 
0

Вы могли бы сделать что-то вроде этого:

function Foo() { 
    this.greet = "hi!"; 
} 

Bar.prototype = new Foo; 

function Bar(color) { 
    Foo.apply(this.arguments); 
    this.color = color; 
} 

var myBar = new Bar("red"); 

A Bar Созданный таким образом будет иметь как greet, так и color. Этот метод сохраняет свойства прототипа.

+0

Измените 'Foo.apply (this.arguments);' на 'Foo.apply (this, arguments);'. Кроме того, немного лучше создать объект-прототип будет «Bar.prototype = Object.create (Foo.prototype);». Не очень важно для этого простого примера. –