JavaScript - 如何将不同文件中的函数添加到类中?

时间:2016-10-25 08:23:03

标签: javascript oop

我对OOP Javascript很新,我不知道如何完成以下操作:

我的 index.js 中有一个课程,但由于我不想在我的索引文件中放入一堆代码,我认为在不同的文件中分开会更有条理(比如将相似的函数放在同一个文件中)。

每个函数都依赖于两个常量keysecret,我使用每个函数的里面的参数。我可以通过以下方式轻松解决这个问题:

const Person function(key, secret) {
  this.functionOne = (key, secret, functionParameter) {};
}

但是每次我想使用key时,我都不想要secretfunctionOne(它们是常量,如api密钥和秘密)。我想要的是,让每个函数(来自不同的文件)以某种方式从keysecret获取值,而不必每次使用Person中的函数时手动放置它。像这样:

index.js

const Person function(key, secret) {
  this.personAction= (key, secret, thing) {};
}

myFunctions.js

personAction function(thing) {
  // do something with key and secret
}

然后能够做到这一点

const person1 = new Person('my_key123', 'my_secret123');
person.personAction('thing');

我能想到的唯一方法是将所有类似的函数放入自己的类中,然后在我的主类(Person)中,返回一个对象,用我的函数初始化每个类,如下所示:

// index.js
const Person function(key, secret) {
  return {
    myFunctions: new MyFunctions(key, secret),
    otherFunctions: new OtherFunctions(key, secret)
  }
}

// myFunctions.js
const MyFunctions function(key, secret) {
  this.something= (thing) => {// do something with my key and secret}
}

通过这样做,我实际上可以这样做:

const person1 = new Person('my_key', 'my_secret');
person1.myFunctions.something('hello')

但这并不是正确的做法,还有其他办法吗?

PS:对不起,如果我没有解释我要做的很好,很难解释,如果我不是很清楚,请告诉我。

2 个答案:

答案 0 :(得分:3)

不要用自己奇怪的结构向后弯腰。这在标准OOP中得到了很好的解决:

function Person(key, secret) {
    this.key = key;
    this.secret = secret;
}

Person.prototype.functionOne = function (functionParameter) {
    console.log(this.key, this.secret, functionParameter);
};

var person1 = new Person('my_key', 'my_secret');
person1.functionOne('hello')

由于原型函数是逐个附加到prototype属性的,因此您可以轻松地将这些函数保存在不同的文件中,然后将这些函数放在一起并且#34;然后。但是,我不知道你为什么要这样做。通常,您希望将一个类定义保持在一个文件中,否则您将很难跟踪其所有组件并查看大图"你的班级实际上做了什么。唯一的例外是" mixins"可以在不同的类之间重用。

答案 1 :(得分:1)

尝试这样的事情

const Person  = function(key, secret) {
  this.key = key;
  this.secret = secret;
  this.personAction= function(thing) {
    //access this.key and this.secret
  };
};

要将方法放在单独的文件中,请尝试此

const Person  = function(key, secret) {
  this.key = key;
  this.secret = secret;
};

Person.prototype.personAction= function(thing) {
    //access this.key and this.secret
};