JavaScript对象实例化选项

鉴于:

function MyCtor() {}
var myInstance = new MyCtor(); //myInstance.constructor ==== MyCtor

var MyCtor = function() {}
var myInstance = new MyCtor(); //myInstance.constructor ==== Function

如果你使用前一个模式实例化一个对象,那么构造器是“更有意义的”。

这些方法之一是首选吗? 有没有比较习惯的情况?


在第一种情况下,您有一个命名的函数,因此在您构造函数的字符串时会看到该名称。

在第二种情况下,您只需要一个指向匿名函数的指针,因此不能为构造函数显示名称。

尽管如此,您可以通过对第二种情况使用命名函数来组合这两种情况:

var MyCtor = function MyCtor() {}
var myInstance = new MyCtor(); //myInstance.constructor === MyCtor

这也适用:

var otherRefName = function MyCtor() {}
var myInstance = new otherRefName(); //myInstance.constructor === MyCtor

关于用法:

当需要将构造函数传递给其他某个函数(也许是回调函数)时,可以使用这种模式。

一个(非常非常简化的)例子可能是这样的:

getConstructor( type ) {

  switch( type ) {
    case 'a': return function ContrA(){};
    case 'b': return function ContrB(){};
  }

}


var myConstr = getConstructor( 'a' ),
    myInstance = new myContr(); // myInstance.constructor === ConstrA

其他相关问题:

  • var functionName = function(){} vs function functionName(){}

  • 作为@ sirko的回答的一个补充(和一点点),我将添加提升POV:

    var myInstance = new MyCtor();
    function MyCtor() {}
    alert(myInstance.constructor ) //MyCtor
    

    var myInstance = new MyCtor();  //error
    var MyCtor = function() {}
    alert(myInstance.constructor )
    
    链接地址: http://www.djcxy.com/p/96291.html

    上一篇: JavaScript object instantiation options

    下一篇: var NAME = function NAME (){ };