Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构造函数也可以称为函数表达式吗?_Javascript - Fatal编程技术网

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

Javascript 构造函数也可以称为函数表达式吗?,javascript,Javascript,它们之间的唯一区别是表达式内部有某种逻辑,而构造函数函数只有一个属性列表吗?我搞不懂为什么看起来相同的东西有不同的名字 //this is an expression var myFunctionExpression = function(){console.log('hi')}; //this is a constructor var myConstructorFunction = function(term){this.greeting = term;} 它们之间的唯一区别是表达

它们之间的唯一区别是表达式内部有某种逻辑,而构造函数函数只有一个属性列表吗?我搞不懂为什么看起来相同的东西有不同的名字

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

 //this is a constructor
 var myConstructorFunction = function(term){this.greeting = term;}
它们之间的唯一区别是表达式内部有某种逻辑,而构造函数函数只有一个属性列表吗

不是真的

函数表达式

var foo = function() { ... }
function foo() {
   ...
}
以及函数语句

var foo = function() { ... }
function foo() {
   ...
}
定义函数有两种不同的方法

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

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

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

是的,一个“构造函数”主要是通过它的用途来识别的,而不是通过用来定义它的语法(函数表达式、函数声明,甚至是
)。@Wiktor谢谢,我的办公室发生了一场关于这个问题的火灾,你刚刚把它扑灭了。