私のクラスのインスタンスの配列を返そうとしています。しかし、復帰は単に私が信じている機能window.addEventListener('load', function(){});
から戻ることです。コントロールにplugins
と入力すると、定義されません。JS:EventListener関数の戻り値
;class Parallax {
constructor(node) {
// Settings and defaults
// this.settings = {
// container: null,
// panels: [],
// defaultSpeed: 0.5
// };
}
static initialize() {
// Ensure DOM has loaded
window.addEventListener('load', function() {
// Does page contain any parallax panels?
let panels = document.querySelectorAll('[data-parallax]');
if (panels.length > 0) {
let instances = [];
// Parallax panels found, create instances of class and return them for reference
for (const panel in panels) {
if (panels.hasOwnProperty(panel)) {
instances.push(new this(panels[panel]));
}
}
return instances;
} else {
// Page doesn't appear to have Parallax
return false;
}
}.bind(this));
}
}
window.plugins = { "parallax-instances": Parallax.initialize() };
ないこれを行うことについて移動する方法があまりにも確かに、私は値を返さないことが、window.addEventListener
に変数を代入しようとしています。私はthis
をイベントリスナー内の関数呼び出しにバインドしてクラススコープを保持しています。
編集: 私は単純に以下を実行することは、第1 constructor
メソッドを実行します当然のように、クラスの可能性のある複数のインスタンスを返す方法をあまりにもわからないが、以下のコードを持っていることによって、プラグインを開始したいんでした。
window.plugins = { "parallax-instances": new Parallax };
編集2 私は望ましい結果を得るためのEventListenerの外のインスタンスを返す場合。しかし、これはページが正しく読み込まれる前に潜在的にinstances
を返す可能性がありますか?
{parallax-instances: Array(2)}
parallax-instances:Array(2)
0:Parallax {}
1:Parallax {}
length:2
__proto__:Array(0)
__proto__:Object
あなたの上記のコードは私が前に使ったものです、これは正しい方法だと言っていますか?ロードコールバックが実行される前に 'return instances;'が実行される可能性はありますか?コードがイベントリスナーを過ぎて実行し続けるので、 –
私はそれが正しい方法ではなく、むしろ正しい方法であるとは言いません。 'return instances;'は、コールバックが実行される前に確実に実行されます。しかし、配列は参照を介して渡され、最終的に入力されます。つまり、配列を使用したいものはすべて待つ必要があります。実装された配列しか取得しないようにするには、コールバック(または約束)の構文を実装する必要があります(つまり、 ''インスタンス化されたインスタンスで呼び出される関数を ''初期化する '')。 – vox