2012-07-20 106 views
1

我周圍搜索,但不幸的是,還沒有找到這個問題的重複。在JavaScript中,如何繼承和擴展正在繼承的方法?

文件1:

var Graph = Backbone.View.extend({ 
    move: function() { 
    //some stuff 
    }, //more stuff 
}) 

文件2:

define ([ './graph.js' ]), function(graph) { 
    var SubGraph = Backbone.View.extend({ 
// this file needs to inherit what is within the move method but extend it to include other stuff 
    }) 

你如何在不破壞現有的延長繼承的屬性?

+0

你能提供更多關於你的期望的細節嗎? – Lucero 2012-07-20 21:43:19

+0

我認爲你可以做'var SubGraph = Graph.extend(...',爲了設置繼承,但我不確定...(我過去只有一次處理骨幹) – 2012-07-20 21:45:24

回答

0

看起來你正在使用Require.js

務必:

圖形模塊:

define(function() { 
    return Backbone.View.extend({ 
    move: function() { 
    //some stuff 
    } 
}); 

子模塊:

define(['require', './graph'], function(require) { 
    var Graph = require('./graph'); 

    return Graph.extend({ 
    // this file needs to inherit what.... 
    } 
}); 

或者,如果你沒有定義很多依賴關係,不包括require

define(['./graph'], function(Graph) { 
    return Graph.extend({ 
    // this file needs to inherit what.... 
    } 
}); 
+0

是有一種方法可以在移動方法中擴展語句嗎?EG:Graph的移動方法包含一個聲明this.model.save({}),它保存x和y座標,並且我希望從子圖的移動方法到擴展語句或將其替換爲包含z座標;這是圖對象當前包含的內容:move:function(){this.model.save({x-coord:this.deltaX,y-coord:this.deltaY} ) – 2012-07-20 22:25:43

+0

你不能擴展它,因爲它不是一個構造函數,如果你使用'move'作爲'var moveA = new move()',你可以執行'move.prototype.newMethod = function()...'但看起來並非如此 – 2012-07-20 22:41:59

+0

只需要清楚,我是否需要做任何動作:function(){...}在graph.js(is技術上認爲是構造函數?)或者只是做var moveA = new move();在subgraph.js中移動:function(){//一些額外的功能}?感謝您花時間回覆! – 2012-07-20 23:13:26