それに入ることができます。Javascript で動作する「慣性カメラ」を作成しました。Javascript の経験は豊富ですが、JS でのプロトタイピングの経験はありません。初期関数コンストラクターを使用して、次のようにカメラを再構築しようとしています。
function Inertia(subject, clickable) {
this.subject = document.getElementById(subject);
this.clickable = document.getElementById(clickable);
}
そしてプロトタイプ:
Inertia.prototype = {
subject : document.getElementById(''),
clickable : document.getElementById(''),
camera : { angleX : 85, angleY : 0, angleZ : 0, translateX : 0, translateY : -100, depth : 0, flag : 1 },
mouse : { x : 0, y : 0 },
friction : 1,
inertia : true,
mouseEvents : {
mouseDown : function( e ) {
var IS = this; // This will not work because I am two levels away from "this" being my object.
// cancel existing animation
clearTimeout((window).animation);
(IS).mouse.x = e.clientX;
(IS).mouse.y = e.clientY;
(IS).camera.flag = 0;
// begin logging history to animate from as a new history stack
(IS).tools.pushHistory('reset');
},
... 続き ...
私の問題は、プロトタイプ オブジェクト内で、mouse.x
やなどのルート レベルの要素にアクセスできないことmouse.y
です。このようなプロトタイプを作成するときに、「慣性」クラスのこの特定のインスタンスのこれらの要素にアクセスするための最良の方法は何ですか? これは完全に間違った考えですか?
この方法でプロトタイプの適切な実装を理解しようとしています。プロトタイピングに関するチュートリアルと記事を調べましたが、このネスティングの問題に対処する例はまだ見たことがありません。それらはすべて、プロトタイプで 1 レベルの深さを使用するため、呼び出しthis
は問題ありません。
var IS
この慣性カメラのすべてのインスタンスで、その特定のオブジェクトのみを変更するように、現在のオブジェクトと等しくしようとしています。ただし、私はプロトタイプ内で 2 レベル深いため、this
キーワードは機能しません。のインスタンスが 1 つしかない場合は、変数名と同じようにハードコーディングできますがnew Inertia()
、それは明らかに望ましくありません。