我正在學習一些使用JavaScript和Three.js庫的WebGL概念,但是我試圖找出如何使用OBJLoader來加載.obj文件使用類。繼承人的代碼:JavaScript中的匿名函數的範圍問題
Model.prototype.loadModel = function() {
var self = this;
loader = new THREE.OBJLoader();
loader.load(this.modelPath, function (object) {
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material.map = self.modelTexture;
}
});
self.modelObj = object;
console.log(self.modelObj); // Returns [Object object]
});
console.log(self.modelObj); // Returns undefined
this.modelObj = self.modelObj;
this.modelObj.position.x = this.x;
this.modelObj.position.y = this.y;
this.modelObj.position.z = this.z;
}
我不能得到的對象爲this.modelObj
使用了匿名函數的,我認爲這是一個範圍的問題。試圖將this.modelObj
添加到函數參數中導致「缺少形式參數」並在函數內部使用this.
認爲它在函數的範圍內(或加載器)
提供的答案我寧願使用'callback(self);'因爲'self.modelObj'中已有'object'的實例。 – antyrat
是的,這個可能是一個好主意,但這取決於你想如何讓內在的膽量暴露在回調之中。一個簡單的規則是*儘可能少*,所以'自我'可能太多了。我真的不知道,但我很欣賞指出這個弱點。 – pid
您將'this'存儲在'that'變量中,但不使用它,'self'指的是'window'對象,因此您將'modelObj'定義爲全局變量。 – Givi