构造函数也可以称为函数表达式吗?

时间:2019-01-20 19:54:15

标签: javascript

它们之间的唯一区别是表达式内部具有某种逻辑,而构造函数仅具有属性列表吗?我很困惑,为什么对于似乎相同的东西有单独的名称。

 //this is an expression
 var myFunctionExpression = function(){console.log('hi')};

 //this is a constructor
 var myConstructorFunction = function(term){this.greeting = term;}

1 个答案:

答案 0 :(得分:2)

  

它们之间的唯一区别是表达式内部具有某种逻辑,而构造函数仅具有属性列表吗?

不是真的。

函数表达式

var foo = function() { ... }

功能说明

function foo() {
   ...
}

是定义函数的两种不同方式。

构造函数是一种特殊的函数,应该使用new运算符创建对象的新实例。在此函数内,您可以使用this来访问它创建的实例。另外,该函数将其prototype设置为新创建实例的原型。

可以使用函数表达式声明构造函数

var Foo = function(whatever) {
   this.whatever = whatever;
} 

var f = new Foo(1);
// f.whatever = 1

或函数语句:

function Foo(whatever) {
   this.whatever = 1;
}

var f = new Foo();
// f.whatever = 1

但是请注意,构造函数不必设置任何属性(这与您的构造函数仅具有属性列表相反)-这将是一个非常有效的构造函数:

  function Foo() {}
  var f = new Foo();

尽管这个琐碎的示例没有多大意义,但引入原型可以显示出真正的价值:

  function Foo() {}
  Foo.prototype.bar = function() {}

  var f1 = new Foo();
  var f2 = new Foo();

  // both f1 and f2 have Foo.prototype as their prototype
  // both can call .bar() then