是的,你可以手动改写一个构造函数的prototype
对象的.constructor
财产。
看起来constructor
属性已被更改。通常你可能会看到类似function Array() { [native code] }
而不是[ undefined ]
。
有一两件事可以做,以验证是...
console.log(typeof [].constructor);
它应该给你"function"
。如果它给你"object"
,那就改变了。
不要相信控制台输出
它从你在Firebug测试评论似乎。
作为一般规则不要太多的信任控制台日志记录。游戏机是环境的插件,并且必须解释它们已被记录到日志中。有时候这种解释是误导性的。
如果你得到奇怪的结果,然后进行其他试验...
console.log(Array); // [ undefined ] ...huh???
console.log([].constructor); // [ undefined ] ...huh???
typeof [].constructor; // Firebug still gives "function"
[].constructor === Array; // Firebug returns true
所以你可以看到,即使萤火虫给函数本身的一个奇怪的解释,它不会改变的事实,它仍然是预期的Array
构造函数。
var data = new Array(1,2,3); console.log(data.constructor);'show me'函数Array(){[native code]}'。你在使用哪个平台?见下面[小提琴](http://jsfiddle.net/t8XVS/)。 – 2012-07-27 18:57:04
嗯..是的,更混乱。如果我在萤火虫控制台中尝试相同的代码,它会记录[未定义]。 – Arjun 2012-07-27 19:02:38
@Arjun:不要太依赖控制台输出。这是一种解释,容易出错和误解。 – 2012-07-27 19:08:35