2014-09-19 54 views
0

因此,我正在使用browserify來管理我正在處理的項目的模塊。browserify和類javascript原型繼承

每個文件都包含沿此線的東西:

module.exports = function(){ 
    // class constructor 
} 

然後在我main.js文件創建的這些新對象是這樣的:

var Foo = require('./foo.js'); 
var foo = new Foo(); 

的事情是,我不不知道如何在這個設置中使用原型繼承。 通常情況下,如果我想類Foo從Bar類繼承我會做這樣的事情:

Foo.prototype = new Bar(); 
Foo.prototype.constructor = Foo; 

Foo = function(){ 
    Bar.call(this) 
} 

我怎麼會做這些方針但是browserify的東西嗎? 我以爲我會通過用module.export替換所有的Foos來做到這一點,但我試圖從easeljs繼承一些東西,它只是不工作。這是說'這'不是在容器的初始化器中定義的。

在此先感謝!

回答

2

隨着browserify,我建議使用inherits模塊。

它避免了創建一個Bar實例來設置原型,constructor賦值並且還提供超類訪問。

你的使用情況是這樣的:

var inherits = require('inherits'); 
var Bar = require('./bar'); 

function Foo() { 
    Bar.call(this); 
} 

inherits(Foo, Bar); 

Foo.prototype.myThing = function() { ... }; 

module.exports = Foo; 
5

應該看起來更像是這個,我覺得:

var Bar = require('./bar'); 

function Foo(){ 
    //... 
} 

Foo.prototype = new Bar(); 
Foo.prototype.constructor = Foo; 

module.exports = Foo; 

請注意,您不需要在Foo再次調用Bar,因爲它已經被調用一次。

+0

非常感謝,我已經打上另一個是正確的有關要求模塊的信息,但這個完美的作品。 – 2014-09-19 17:28:05

+0

其實你需要改變你的例子: 錯誤: Foo.prototype = new Bar(); correct: Foo.prototype = Object.create(Bar.prototype); – Chip 2017-03-15 16:18:16