我对OOP Javascript很新,我不知道如何完成以下操作:
我的 index.js 中有一个课程,但由于我不想在我的索引文件中放入一堆代码,我认为在不同的文件中分开会更有条理(比如将相似的函数放在同一个文件中)。
每个函数都依赖于两个常量key
和secret
,我使用每个函数的里面的参数。我可以通过以下方式轻松解决这个问题:
const Person function(key, secret) {
this.functionOne = (key, secret, functionParameter) {};
}
但是每次我想使用key
时,我都不想要secret
和functionOne
(它们是常量,如api密钥和秘密)。我想要的是,让每个函数(来自不同的文件)以某种方式从key
和secret
获取值,而不必每次使用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:对不起,如果我没有解释我要做的很好,很难解释,如果我不是很清楚,请告诉我。
答案 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
};