在JavaScript中的构造函数中定义任意代码和局部变量函数是一种不好的做法吗?

在JavaScript中的构造函数中定义任意代码和局部变量函数是一种不好的做法吗?,javascript,Javascript,我的任务是重构一位前雇员的一些代码。他使用的构造函数有两个看起来很奇怪的东西——1,在函数或属性之外运行的任意代码,2,本地定义的函数。这是对他所做工作的简化: var Dog = function(){ // Arbitrary code console.log('I am a dog'); var foo = 'foo'; // Function defined to local variable var bar = function(){

我的任务是重构一位前雇员的一些代码。他使用的构造函数有两个看起来很奇怪的东西——1,在函数或属性之外运行的任意代码,2,本地定义的函数。这是对他所做工作的简化:

var Dog = function(){

    // Arbitrary code
    console.log('I am a dog');
    var foo = 'foo';

    // Function defined to local variable
    var bar = function(){
        console.log(foo);
        console.log('bar');
    };

    // Normal function in a constructor
    this.bark = function(){
        console.log('bark');
    };
};

var d = new Dog();

这种类型的构造函数有什么优点吗?或者更好的方法是重构它,只使用
this
bark
的风格定义函数,然后根据需要在
d
上运行它们?

我不认为有任何特殊的“优点”只是许多方法中的一种。代码只是在实例化时运行

“bar”函数对类用户是隐藏的(如果您喜欢旧的OO名称,则为“private”),可以从类外部调用“bark”函数。 这是在JS中实现某种OO的方法之一。有很多


Javascript是一种非常“自由”的语言。你可以看到人们总是用不同的方式做事。“正确”的道路不止一条。习惯它:)

这个问题更合适,因为它非常好。它被称为封装构造函数,它几乎总是在函数之外有代码,通常是从参数初始化属性。@NelsonTeixeira Foo/bar示例在代码审查时可能会偏离主题。是的,我想知道是否将这种类型的代码放在“init”函数中会被认为是更好的做法,然后在instanceIMO上运行它这只是个人喜好。但我想你的里程可能会有所不同。。。。