图表库的闭包或原型模型

时间:2014-04-25 17:55:26

标签: javascript performance d3.js

开发javascript图表库,哪种模型最好是原型还是封闭? 在开发包含更多内容和动画的图表库时,是否需要封装?

就像这里一样,

function main(){
 var w = 100;

 function chart(){
  //main chart rendering
 }
 chart.width = function(){}
 chart.regenerate = function(){}
 chart.sort = function(){}
 chart.updatelegend = function(){}
 chart.startanimation = function(){}
return chart;
}

这是一个有效的案例来使用这样的javascript闭包吗?

2 个答案:

答案 0 :(得分:0)

我对您的域名一无所知,但这是您可以做的一个示例:

//define the 'charts' module
var charts = (function () {

    //Chart constructor
    function Chart() {
    }

    Chart.prototype = {
        constructor: Chart,

        //public Chart API
        width: function () { /*...*/ }
    };

    //public module members
    return {
        Chart: Chart
    };
})();

//using it
var chart = new charts.Chart();

如果您需要特权成员,您可以始终依赖闭包,但我不推荐它,因为它的内存效率较低(实例不共享功能)。

E.g。

function Chart(width) {
    var _width = width; //private var

    //priviledged function
    this.width = function () { return _width ; };
}

答案 1 :(得分:0)

在下面的代码中,我没有使用您使用的Prototype。两个代码之间是否有任何区别。任何方式都会返回相同的Object.Is处理对象有任何区别

var charts = (function () {

    //Chart constructor
    function Chart() {
        console.log(this.width())
    }

    Chart.constructor = function() {
    }
    Chart.width = function(){
    }

    };

    //public module members
    return Chart

    })();

//using it
var chart = new charts.Chart();