在JavaScript中,我喜欢用于构造函数的PascalCase的命名约定和用于其他函数的camelCase。看起来ReSharper配置为这些设置。但是,对于这样的代码:
function Thing(a, b) {
return {
prop1: a,
prop2: b
};
}
var thing = new Thing(2, 6);
...我收到了这个警告:
名称'Thing'与规则'Local Function'不匹配。建议的名称是“东西”。
如果我将Thing
更改为:
function Thing(a, b) {
this.prop1 = a;
this.prop2 = b;
}
我怀疑只有“公共”功能被认为是构造函数。你们中的任何人都知道ReSharper如何区分“本地”和“构造函数”功能吗?更好的是,你知道如何覆盖这种行为吗?
答案 0 :(得分:9)
嗯,这是ReSharper中的bug。您可以自己等待或修复它。或者在全球范围内定义它。
不过,这些功能做的事情非常非常不同。你绝对不想把前者称为构造函数。答案 1 :(得分:0)
如果您希望构造函数是公共的,则可以使用此解决方法:
(function(global){
function kindOfPrivateFunction(thing){
//Do something with thing
}
global.Thing = function(a, b) {
this.prop1 = a;
this.prop2 = b;
knindOfPrivateFunction(this);
};
global.Thing.publicFunction = function() { };
})(this);
或者,如果你不想让resharper抱怨“ThisInGlobalContext”:
(function(){
function kindOfPrivateFunction(thing){
//Do something with thing
}
this.Thing = function(a, b) {
this.prop1 = a;
this.prop2 = b;
knindOfPrivateFunction(this);
};
this.Thing.publicFunction = function() { };
})();
修改强>
考虑到您的类必须是本地的,您可以使用本地对象来“存储”本地构造函数。但这真的只是一个关闭Resharper的黑客......
(function(){
var local = {};
function kindOfPrivateFunction(thing){
//Do something with thing
}
local.Thing = function(a, b) {
this.prop1 = a;
this.prop2 = b;
knindOfPrivateFunction(this);
};
local.Thing.prototype.publicFunction = function() { };
var instance = new local.Thing(1, 2);
})();