是否可以从继承自A的对象中调用对象A内的Javascript函数(即私有)?

时间:2011-06-24 20:40:24

标签: javascript jquery

我希望能够测试一些内部函数,而无需将Javascript测试代码放在同一个文件中。我一直在尝试继承具有内部函数的类,然后添加包装函数以使它们公开,如下所示:

copyPrototype(TrafficChartCanvas_test, TrafficChartCanvas);

function TrafficChartCanvas_test() {

    TrafficChartCanvas_test.prototype.test_getYScale = function(reach) {
        return getYScale(reach);
    }
}

假设copyPrototype成功将TrafficChartCanvas的原型分配给TrafficChartCanvas_test。这是我试图测试的文件的一部分:

function TrafficChartCanvas(...) {

    // some other stuff here... public functions, etc.

    function getYScale(reach) {
        ...
    }
}

但是,这对我不起作用。还有其他办法吗?

2 个答案:

答案 0 :(得分:3)

getYScale不是TrafficChartCanvas原型的一部分,它位于闭包之内。他们是两个非常不同的东西。

您可以更改创建TrafficChartCanvas的方式并重新构建代码,如:

TrafficChartCanvas.prototype = {
  // (... Other functions ...)
  getYScale: function() {
      ...
  }
}

这将函数放入原型中,并允许使用编写并包含在另一个文件中的测试对其进行测试。您不能将函数保存在闭包中,并且可以访问外部测试;你必须走原型路线。

答案 1 :(得分:1)

“TrafficChartCanvas”函数可以安排一种显式导出函数的方法,但没有办法,没有办法做到这一点。