javascript构造函数的差异

difference on javascript constructors

本文关键字:构造函数 javascript      更新时间:2023-09-26

除了解析构造函数之外,这两者之间还有什么区别吗?

var Person = function(living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function() {
        return this.gender;
    };
};
var Person = function Person(living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function() {
        return this.gender;
    };
};

都可以使用

调用
var p = new Person("Yes",25,"Male");

第一个解析为function(),而后者解析为person(),但我想知道使用其中一个是否比使用另一个有任何优势

它们对于您所说的目的是相同的。

唯一不同的是,在第二个函数内部,你有一个从函数本身到函数的干净引用。

正式

语言规范声明:

FunctionExpression:

函数标识符(opt) (FormalParameterListopt) {FunctionBody}

函数表达式中的标识符(本例中为Person)是可选的

这样做的原因将在稍后的语言规范中解释:

FunctionExpression中的Identifier可以从在FunctionExpression的FunctionBody中允许函数递归地调用自身。然而,与函数声明不同的是,FunctionExpression中的标识符不能被引用不能影响FunctionExpression的作用域。

在实践中

在以下两种情况下可以使用第二个选项:

当它使你的代码更容易理解时:

   (function removeBodyDivs(){
        //does logic removing
        //divs from the body
   })();

可以比

更容易理解
   (function (){
        //does logic removing
        //divs from the body
   })();

在进行递归时,例如

  var f = function fib(n){
      return n<2?2:(fib(n-1)+fib(n-2));
  }