gpt4 book ai didi

JavaScript 对象实例化选项

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:46:19 28 4
gpt4 key购买 nike

给定:

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

其他相关问题:

关于JavaScript 对象实例化选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25104358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com