You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RequireJS的method_Two.function_Two中调用method_One.function_One?

如何在method_Two.function_Two中调用method_One.function_One?

嘿,我来帮你捋捋这个问题~你当前写的this.method_One().function_One()是行不通的,因为在function_Two内部的this并不是指向你模块返回的那个对象,直接这么写会报this.method_One is not a function的错误。下面给你几种可行的实现方式:

方案一:缓存模块自身的引用

在模块内部提前把整个返回对象存起来,这样不管内部方法的上下文怎么变,都能稳定访问到目标方法:

define(function (require) { 
  var language = require('../language.config'); 
  // 先定义变量存储模块自身
  var module = { 
    method_One: function(){ 
      function function_One(data){ 
        return true; 
      } 
      return { function_One : function_One } 
    }, 
    method_Two: function(){ 
      // 提前获取function_One的引用
      var functionOne = module.method_One().function_One;
      function function_Two(data){ 
        var getValueOfFunctionOne = functionOne(data);
        // 这里可以处理拿到的结果
        return getValueOfFunctionOne; 
      } 
      return { function_Two : function_Two } 
    }, 
  };
  return module;
});

方案二:把function_One提升到模块外层(推荐)

如果function_One不需要依赖method_One内部的局部变量,直接把它放到模块最外层是最简洁的方式,让两个方法都能直接访问:

define(function (require) { 
  var language = require('../language.config'); 

  // 把function_One移到模块外层,让所有内部方法都能访问
  function function_One(data){ 
    return true; 
  }

  return { 
    method_One: function(){ 
      return { function_One : function_One } 
    }, 
    method_Two: function(){ 
      function function_Two(data){ 
        var getValueOfFunctionOne = function_One(data);
        // 处理结果逻辑
        return getValueOfFunctionOne; 
      } 
      return { function_Two : function_Two } 
    }, 
  };
});

方案三:保存method_Two执行时的上下文

如果你一定要保留原有的嵌套结构,可以在method_Two内部用变量缓存当前的this(也就是模块对象),避免上下文丢失:

define(function (require) { 
  var language = require('../language.config'); 
  var module = { 
    method_One: function(){ 
      function function_One(data){ 
        return true; 
      } 
      return { function_One : function_One } 
    }, 
    method_Two: function(){ 
      var self = this; // 缓存method_Two执行时的上下文
      function function_Two(data){ 
        var getValueOfFunctionOne = self.method_One().function_One(data);
        // 处理结果逻辑
        return getValueOfFunctionOne; 
      } 
      return { function_Two : function_Two } 
    }, 
  };
  return module;
});

简单总结下:如果function_One不需要依赖method_One的局部变量,优先选方案二;如果必须保留function_One在method_One内部,方案一和三都能解决问题,其中方案一的可读性更强。

内容的提问来源于stack exchange,提问作者Joao Belem Jr.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:36