2015-02-26 3 views
0

Создает объект пространства имен, и я могу его использовать.javascript oop namespaces и inheritance

Test = {}; 
Test.Car = function init(color){ 
    this.color = color; 
} 
Test.Car.prototype.paint = function(color) { 
    return this.color = color; 
}; 
Test.Car.prototype.print = function(){ 
    return this.color; 
} 

Пример использования:

var Car4 = new Test.Car('Blue'); 
Car4.paint('red'); 
alert(Car4.print()); 

Теперь я хочу, чтобы создать новый объект, и я хочу, чтобы наследование формы тест:

Test2 = {} сделать здесь наследования формы теста и переопределить с использованием прототипа? Test2.prototype = Object.create (Test.prototype); не работает

Как это сделать. Нужна помощь в этом.

+0

Test является пространством имен и автомобиль ваш объект. вы имели в виду, что хотите наследовать объект Car –

+0

'Test' - это не пространство имен, это просто объект. 'Object.create (Test.prototype)' не работает, потому что 'Test' не является функцией. Что вы хотите «наследовать» от 'Test'? –

+0

@ T.J.Crowder: Правильно, я имел в виду, что OP пытается принять объект Test в качестве своего пространства имен или, другими словами, контейнер –

ответ

1

Test - это объект, а не «пространство имен» или функция, хотя иногда люди называют объекты, которые вы помещаете в пространства имен (они не являются).

Я не уверен, почему вы хотите, но вы можете использовать Test как прототип Test2, делая это:

var Test2 = Object.create(Test); 

Теперь такие вещи, как это произведение:

var c = new Test2.Car(); 

... потому что Test2 наследует Car от Test.

Если вы хотите создать Car2, это немного сложнее:

var Car2 = function() { // Or `Test.Car2 = function` or whatever 
    Test.Car.apply(this, arguments); 
    // Or: `Test.Car.call(this, "specific", "arguments", "here");` 

    // ...Car2 stuff... 
}; 
Car2.prototype = Object.create(Test.Car.prototype); 
Car2.prototype.constructor = Car2; 
+0

Это был ключ var Test2 = Object.create (Test); – user2217288