我更喜欢在大型项目中使用OOP,就像我现在正在研究的那样.我需要在JavaScript中创建几个类,但是,如果我没有弄错的话,至少有几种方法可以做到这一点.什么是语法,为什么会以这种方式完成?
我想避免使用第三方库 - 至少在开始时.
寻找其他答案,我找到了文章面向对象的JavaScript编程,第一部分:继承 - Doc JavaScript,讨论了JavaScript中的面向对象编程.是否有更好的继承方式?
我最近Object.create()在JavaScript中偶然发现了这个方法,并试图推断它与创建一个对象的新实例有什么不同new SomeFunction(),当你想要使用另一个时.
请考虑以下示例:
var test = {
val: 1,
func: function() {
return this.val;
}
};
var testA = Object.create(test);
testA.val = 2;
console.log(test.func()); // 1
console.log(testA.func()); // 2
console.log('other test');
var otherTest = function() {
this.val = 1;
this.func = function() {
return this.val;
};
};
var otherTestA = new otherTest();
var otherTestB = new otherTest();
otherTestB.val = 2;
console.log(otherTestA.val); // 1
console.log(otherTestB.val); // 2
console.log(otherTestA.func()); // 1
console.log(otherTestB.func()); // 2Run Code Online (Sandbox Code Playgroud)
请注意,在两种情况下都观察到相同的行为.在我看来,这两种情况之间的主要区别是:
Object.create()实际使用的对象实际上形成了新对象的原型,而在new …我正在尝试在 NodeJs 应用程序上开发一个带有静态方法的类,作为配置模块的目的。
我想从不同的模块访问它,而无需每次都实例化一个新对象。
1)使用如下方法避免类原型是否正确?
function Config(){
}
Config.svrPort=function(){
return 8080;
}
Config.dbName=function(){
return "myDbName";
}
module.exports = Config;
Run Code Online (Sandbox Code Playgroud)
2)还有其他解决方案吗?
3)像这样将不同的对象放在同一个模块(例如config.js)中也是一种有效的方法吗?
exports.server=function(){
return{
port:8080
};
};
exports.database=function(){
return{
name:"myDbName",
user:"root",
password:"myPassword",
host:"localhost",
port:3306
};
};
Run Code Online (Sandbox Code Playgroud)
最后将其用作:
var config = require('./config');
config.server().port
config.database().name
Run Code Online (Sandbox Code Playgroud)