原型成Closure对象

时间:2017-03-23 22:21:26

标签: javascript closures

因此,作为工作要求,我们的代码不能超过80列和250行。这意味着我必须返回并将我的代码分解为更小的文件,我正在探索一些选项。首先想到的是prototyping使用JavaScript,因为我无法安装RequireJS。其次,我的应用程序使用闭包。我的问题是:你能成为一个闭包的原型吗?示例如下。

  

档案#1

var app = (function () {
  var _userName = "Steve";
  function sayHello() {
    return "Hello " + _userName;
  }
  return {
    sayHello: sayHello
  }
})();
  

档案#2

app.prototype.sayGoodbye = function() {
  return "Goodbye " + _userName;
};
  

输出

app.sayHello(); // should output "Hello Steve"
app.sayGoodbye(); // should output "Goodbye Steve"

然而,这似乎不起作用,因为sayGoodbye()函数不包含在闭包中。但是,如果告诉sayHello()函数使用sayGoodbye(),那也不起作用。关于如何跨多个文件构造闭包对象的任何建议?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以像这样更改closure function这是一个closure function,看起来更像是class

var app = (function() {

  // This is your constructor
  function app() {
    this._userName = "Steve";
  }

  function hello() {
    return "Hello " + this._userName;
  }

  // This is made to do the above function hello() public
  app.prototype.sayHello = function() {
    return hello.call(this);
  }

  // Here we return the app object to be able to do a prototype
  return app;
})();

// Here we do our prototype
app.prototype.sayGoodbye = function() {
  return "Goodbye " + this._userName;
}

// Here we create an instance
var a = new app();

console.log(a.sayHello()); // should output "Hello Steve"
console.log(a.sayGoodbye()); // should output "Goodbye Steve"