javascript 模块模式上下文问题

标签 javascript

我在学习模块模式时遇到困难,

能够从安装程序中运行我的函数 getData 的正确方法是什么,目前它尚未定义。

https://jsbin.com/movaleyedo/edit?html,js,console,output

var module = (function(){
  var Setup = function(){
    this.getData = function(){
      return "data";
    };
    this.init = function(){
      
      this.getData(function(err,data){
         alert(data);
      });
    };
  };
  return {
    init: new Setup().init
  };
})();
module.init();

"TypeError: this.getData is not a function
at Object.init (movaleyedo.js:8:12)
at movaleyedo.js:17:8
at https://static.jsbin.com/js/prod/runner-3.35.9.min.js:1:13891
at https://static.jsbin.com/js/prod/runner-3.35.9.min.js:1:10820"

我创建了第二个示例,说明为什么我不明白发生了什么。

var Module = (function(){
  var app = this;
  var One = function(){
    this.one = function(){
      return 1;
    }
    this.getNumbers = function(){
      return this.one();
    }
  };
  
  var Two = function(){
    this.getNumbers = function(){
      return 2;
    }
    this.two = function(){
      app.one = new One;
      console.log(app.one.getNumbers()); //doesnt break
      console.log(this.getNumbers());//breaks
    }
  };
  
  return {
    init: new Two().two
  };
  
})();
Module.two();

基本上在 One() 内部,我可以调用 return this.one()。

但在 Two() 内我无法调用 this.getNumbers()

最佳答案

实现是同步的,调用是异步的

this.getData = function(){
  return "data";
};

this.getData(function(err,data){
   alert(data);
});

//should be used either
var data = this.getData();
alert(data);

//or defined as

this.getData = function(callback){
  callback(null, "data");
};

另外,其他用户是对的,您只传递了该函数。在该函数中使用“this”关键字将引用其他内容。为什么不传递实例本身或创建实例?

类似这样的事情

return new Setup();

module.init();

return Setup;

var instance = new module();
instance.init();

关于javascript 模块模式上下文问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369763/

相关文章:

Javascript 小部件(类似于 Facebook Like)脚本 vs Iframe 方法

javascript - 将字符串和输入选择值添加到 url onchange 和页面加载

javascript - Ajax 选项卡设置不适用于本地主机 (EasyTabs)

javascript - 我试图通过访问嵌套属性并检查它的属性值是否包含特定字符串来过滤数组中的项目

javascript - ionic : How to stop reloading page content once its completely loaded

javascript - 使用 jQuery Bootgrid 方法

javascript - 从 ‘demo’ key 更改为我的 key 后,无法填充 EON 图表

javascript - PHP var->Javascript->PHP

javascript - 打开建议时从输入中删除底部边框半径

javascript - React - 直接访问或分配数据对象到 FieldArray 的 Field 组件