javascript - JavaScript 中匿名函数的作用域问题

标签 javascript three.js anonymous-function scoping

我正在使用 javascript 和 Three.js 库学习一些 WebGL 概念,但在尝试弄清楚如何使用 OBJLoader 时遇到了一些障碍。使用类加载 .obj 文件。代码如下:

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. 认为它在函数(或 loader )的范围内

最佳答案

要在加载完成时调用回调,请将回调作为参数添加到您的函数中:

Model.prototype.loadModel = function (callback) {
    var self = this;
    var loader = new THREE.OBJLoader();

    loader.load(this.modelPath, function (object) { // inner function will be called on success
        object.traverse(function (child) {
            if (child instanceof THREE.Mesh)
            {
                child.material.map = self.modelTexture;
            }
        });

        self.modelObj = object;
        callback(object); // pass loaded object to callback function
    });
}

当您这样做时,您将加载逻辑与回调分开,您将在回调中实际消耗/使用已加载的数据。 想象一下,您有多个这样的情况,您不必一遍又一遍地编写加载逻辑(内部成功函数)。

XHR(在 AJAX 中使用)还接受错误函数,并要求您的函数检查 readystate 变量。我不知道这是否也适用于这个加载程序。但如果可以的话,您也应该实现错误情况。

关于javascript - JavaScript 中匿名函数的作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21480509/

相关文章:

javascript - 验证表单 JavaScript

javascript - 如何在地球引擎中保存卫星图像?

javascript - Angular 路线解决不等待 promise

JavaScript Three.js 3D引擎: how to make object bigger by 20%?

javascript - 如何处理 Three.js 场景中的 Click 事件?

javascript - 在 DeviceOrientationControls 中设置相机运动

javascript - 如何按每个id对数组中的对象求和,计算平均总和,按条件设置

javascript - 匿名函数的上下文是什么?

kotlin - 如何将挂起函数作为显式参数传递给协程构建器?

javascript - 数组中的每个元素同时递增,而实际上只应该递增一个元素