关于JavaScript object.constructor属性的问题 是否存在anyObject.constructor属性为null或未定义的可能性(尤其是在未修改/覆盖ConstructorFunc.prototype时) var-date=新日期();console.log(date.constructor)//记录“日期()”。好的 var数据=新数组(1,2,3);console.log(data.constructor)//它记录的内容类似于[undefined]。它是什么,为什么不是Array()
短暂性脑缺血发作关于JavaScript object.constructor属性的问题 是否存在anyObject.constructor属性为null或未定义的可能性(尤其是在未修改/覆盖ConstructorFunc.prototype时) var-date=新日期();console.log(date.constructor)//记录“日期()”。好的 var数据=新数组(1,2,3);console.log(data.constructor)//它记录的内容类似于[undefined]。它是什么,为什么不是Array(),javascript,constructor,Javascript,Constructor,短暂性脑缺血发作 是的,您可以手动覆盖构造函数的原型对象的.constructor属性 似乎构造函数属性已更改。通常,您可能会看到类似于函数数组(){[native code]}的内容,而不是[undefined] 你可以做一件事来验证 console.log(typeof [].constructor); 它应该为您提供“函数”。如果它为您提供了“对象”,则它已被更改 不信任控制台输出 从评论中可以看出,您正在Firebug中进行测试 一般来说,不要太信任控制台日志记录。控制台是环境的附加
原型
对象的.constructor
属性构造函数
属性已更改。通常,您可能会看到类似于函数数组(){[native code]}
的内容,而不是[undefined]
console.log(typeof [].constructor);
它应该为您提供“函数”
。如果它为您提供了“对象”
,则它已被更改
不信任控制台输出 从评论中可以看出,您正在Firebug中进行测试 一般来说,不要太信任控制台日志记录。控制台是环境的附加组件,必须解释提供给日志的内容。有时这种解释是误导性的 如果您得到奇怪的结果,那么执行其他测试
console.log(Array); // [ undefined ] ...huh???
console.log([].constructor); // [ undefined ] ...huh???
typeof [].constructor; // Firebug still gives "function"
[].constructor === Array; // Firebug returns true
因此,您可以看到,尽管Firebug对函数本身给出了奇怪的解释,但它并没有改变这样一个事实,即它仍然是预期的Array
构造函数
构造函数
属性是可写的。因此,anyObject.constructor
可以显式设置为undefined
或null
(这将在anyObject
上创建一个新属性,并且不会修改原型的constructor
属性)。您还可以将原型的构造函数
属性更改为空
或未定义
,以便它反映在函数的每个实例上。默认情况下,它永远不会是null
或未定义的
函数数组(){[native code]}
。由于没有得到相同的结果,可能第三方代码修改了Array.prototype.constructor
。你应该检查一下var数据=新数组(1,2,3);console.log(data.constructor)代码>显示函数数组(){[native code]}
。你在使用哪个平台?看下面,嗯。。是的,更多的困惑。如果我在firebug控制台中尝试相同的代码,它会记录[未定义]。@Arjun:不要过于依赖控制台输出。这是一种解释,容易出现错误和误解。