我知道有几种模式可以使 javascript “类”。
我想采用“通过原型扩展”的方式......只是因为它看起来更整洁。我不太担心这里的性能......
在下面的示例中,我有一个类(基本功能)MetricsChart,我有几个公共方法和一个私有方法(基本上是可重用的方法)
这里来自公共方法(drawOrAdd)我无法访问私有方法(_convertArrayToTable),我该怎么做?
function MetricsChart(containerId, chartType) {
this._container = document.getElementById(containerId);
this._chartType = chartType;
this._isChartDrawn = false;
this._chartData = null;
var _convertArrayToTable = function (data) {
return google.visualization.arrayToDataTable(data);
}
}
MetricsChart.prototype.drawOrAdd = function(data)
{
if (!this.isChartDrawn()) {
var chart = new google.visualization.LineChart(this._container);
if (chart) {
var table = _convertArrayToTable(data);
console.log(table);
this._isChartDrawn = true;
}
}
}
MetricsChart.prototype.isChartDrawn = function () {
return this._isChartDrawn;
}
MetricsChart.prototype.getChartData = function () {
}
我偶然发现的一种方法是将公共方法包含在 MetricsChart 类本身中......
它对我有用:),我可以访问外部的公共方法,公共方法可以访问私有方法(达到目的)。下面的代码......这是对的吗?我在做什么?
function MetricsChart(containerId, chartType) {
this._container = document.getElementById(containerId);
this._chartType = chartType;
this._isChartDrawn = false;
this._chartData = null;
var _convertArrayToTable = function (data) {
return google.visualization.arrayToDataTable(data);
}
MetricsChart.prototype.drawOrAdd = function (data) {
if (!this.isChartDrawn()) {
var chart = new google.visualization.LineChart(this._container);
if (chart) {
var table = _convertArrayToTable(data);
console.log(table);
this._isChartDrawn = true;
}
}
}
MetricsChart.prototype.isChartDrawn = function () {
return this._isChartDrawn;
}
MetricsChart.prototype.getChartData = function () {
}
}