Javascript 用对象实例化变量将对象转换为函数,然后对象数据成员返回未定义的值

Javascript 用对象实例化变量将对象转换为函数,然后对象数据成员返回未定义的值,javascript,arrays,function,object,Javascript,Arrays,Function,Object,输出:对象DDS功能未定义 为什么b的值与a[0]不同?当a[0].af返回“DDS”时,为什么b.af返回undefined?为了解决混淆问题,我们可以尝试一步一步地控制台。记录它们以了解发生了什么 var a = [function (){this.af = "DDS"}] var b = a[0] a[0] = new a[0] console.log(typeof a[0], a[0].af, typeof b, b.af) 因为b是对函数的引用,a[0]是JS“类”的实例。这里的

输出:对象DDS功能未定义


为什么b的值与a[0]不同?当a[0].af返回“DDS”时,为什么b.af返回undefined?

为了解决混淆问题,我们可以尝试一步一步地控制台。记录它们以了解发生了什么

var a = [function (){this.af = "DDS"}]
var b  = a[0] 
a[0] = new a[0]
console.log(typeof a[0], a[0].af, typeof b, b.af)

因为
b
是对函数的引用,
a[0]
是JS“类”的实例。这里的数组只是添加了噪声,如果没有它,您可能会得到相同的结果:
function a(){this.af=“DDS”};var b=a;a=新的a;控制台日志(a型、a.af型、b型、b.af型)。您是否打算使用
var b=newa[0]
?我写错了。很抱歉我想说的是,我有一个对象列表。在我初始化它们之前,它们都是函数。在web控制台中,它将它们显示为最小化视图的函数,但当我单击凹口使其展开时,它将它们显示为对象。当我做typeof时,它将它们显示为函数。为什么在Chrome或Firefox中,当某个对象是对象时,它会显示为函数在调用
console.log
时,对象的日志(包括函数和数组,因为它们是对象)会显示对象的压缩版本,但会显示对象的当前值这似乎会引起混淆。如果您想按记录时的状态记录信息,请将信息转换为字符串并记录字符串,而不是对象。您是否真的在问“如果我在数组中复制一个条目,然后更改数组中该条目的值,为什么该副本也不更新?”不,我不是在问这个问题,但感谢您对web浏览器的深入了解。好的,我试着在没有上下文的情况下解释我的问题。这就是问题所在。我有一系列的函数,它们是构造函数。我循环遍历数组,并使用new将每个函数构造成一个对象。然后在打印包含数据成员的数组时显示对象。但当我在列表的某个元素上执行type of时,它会显示function,最重要的是当我执行foo[0]时。dataMember返回为undefined,尽管在控制台记录列表时显示了它,但我写错了。很抱歉我想说的是,我有一个对象列表。在我初始化它们之前,它们都是函数。在web控制台中,它将它们显示为最小化视图的函数,但当我单击凹口使其展开时,它将它们显示为对象。当我做typeof时,它将它们显示为函数。为什么当某个对象是一个函数时,它会显示为一个函数呢?请注意,在定义之后从对象中获取数据成员是未定义的
var a = [function (){this.af = "DDS"}]; // a is an array with function declaration as first element
var b  = a[0]; //b is now a function declaration. **Without running nor executing it**
a[0] = new a[0] //By running new a[0] we are creating an instance and 
                //we replaced with the first element of array

console.log(typeof a[0], a[0].af, typeof b, b.af)

a[0] is now an instance //{af: 'DDS'}
a[0].af === 'DDS'
b is still a function declaration
b.af will be undefined because b doesn't have a property `af`