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
其他相关问题:
作为@ 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