मैंने अभी जावास्क्रिप्ट में ओओपी का उपयोग करना शुरू कर दिया है और मैं किसी अन्य विधि के अंदर से किसी विधि को प्राप्त करने की कोशिश करने वाली कुछ समस्याओं में भाग गया।जावास्क्रिप्ट ऑब्जेक्ट, स्वयं संदर्भ समस्या
यहाँ कोड मैं था है:
var Game = {
initialize: function() {
if (canvas.isSupported()) {
sprites[0] = new Player();
this.update();
}
},
update: function() {
for (var i = 0; i < sprites.length; i++) {
sprites[i].update();
}
this.draw();
},
draw: function() {
this.clear();
for (var i = 0; i < sprites.length; i++) {
sprites[i].draw();
}
setTimeout(this.update, 10);
},
clear: function() {
canvas.context.clearRect(0, 0, canvas.element.width, canvas.element.height);
}
}
लेकिन Game.update() कॉल करने में त्रुटि है कि ड्रॉ विधि से परिभाषित नहीं है देता है। मुझे इसके लिए एक वास्तविक समाधान नहीं मिला। अंत में मैं इस How to call a method inside a javascript object जवाब लगता है जहां पाया जा करने के लिए है कि मैं सुरक्षित करने की जरूरत है इस संदर्भ की तरह: var _this = this;
लेकिन मुझे लगता है कि शाब्दिक अंकन में काम करने के लिए नहीं मिल सका, तो मैं निर्माता आपत्ति उठाने का कोड बदल (मुझे लगता है कि इस तरह इसे कहा जाता है) और चर जोड़ा गया।
मैं तो
_this.draw();
को
this.draw();
बदल गया और यह काम किया।
हालांकि
this.clear();
और this.update() अभी भी वही कर रहे हैं, वे पहली जगह में त्रुटियों देने के लिए लग रहा था कभी नहीं।
क्या कोई यह समझा सकता है कि यह क्यों है? और शायद मुझे एक बेहतर समाधान के लिए इंगित करें? अग्रिम धन्यवाद।
अद्यतन
यहाँ यह क्या होना चाहिए:
var Game = function() {
var _this = this;
this.initialize = function() {
if (canvas.isSupported()) {
sprites[0] = new Player();
this.update();
}
}
this.update = function() {
for (var i = 0; i < sprites.length; i++) {
sprites[i].update();
}
this.draw();
}
this.draw = function() {
this.clear();
for (var i = 0; i < sprites.length; i++) {
sprites[i].draw();
}
setTimeout(function() { _this.update(); }, 10);
}
this.clear = function() {
canvas.context.clearRect(0, 0, canvas.element.width, canvas.element.height);
}
}
क्या आप पूरा कोड दिखा सकते हैं? –
+1 शानदार होने और अपना अपडेट पोस्ट करने के लिए +1। इस पोस्ट ने अंततः वैकल्पिक नेमस्पेसिंग विधियों में मतभेदों को ठोस बना दिया। आपने आज मुझे एक बेहतर कोडर बनाया है। :) – Evildonald