JavaScriptを「クラスのように」するパターンがいくつかあることを理解しています。
「プロトタイプによる拡張」の方法を取りたいと思います...単にbcozの方がきれいに見えます。ここではパフォーマンスについてあまり心配していません...
以下の例では、クラス(基本的に関数)MetricsChartがあり、いくつかのパブリックメソッドと1つのプライベートメソッド(基本的に再利用可能なメソッド)があります
ここでは、パブリックメソッド(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 () {
}
私が偶然見つけた方法の 1 つは、パブリック メソッドを 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 () {
}
}