2015-02-26 124 views
0

它創建名稱空間對象,我可以使用它。使用JavaScript的OOP名稱空間和繼承

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

測試是命名空間和車是你的對象。你是否意味着你想從Car對象繼承 –

+0

'Test'不是一個命名空間,它只是一個對象。 'Object.create(Test.prototype)'不起作用,因爲'Test'不是函數。你想從「測試」中「繼承」什麼? –

+0

@ T.J.Crowder:正確的,我的意思是OP試圖假設Test對象作爲他的名字空間或換句話說容器 –

回答

1

Test是一個對象,不是「名稱空間」或函數,儘管有時候人們會調用對名稱空間的屬性(它們不是,真的)。

我不知道爲什麼你會想,但你可以這樣使用TestTest2原型:

var Test2 = Object.create(Test); 

現在這樣的事情工作:

var c = new Test2.Car(); 

...因爲Test2Test繼承Car

如果你想創建一個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

這是關鍵變種Test2 = Object.create(Test); – user2217288