我在谷歌的控制台 api 参考中没有找到任何明确的解释,但我很好奇理解,这是我的结论。
这是 jQuery 中发生的事情的简化版本,只保留问题上下文中有趣的内容。
var jQuery = function() {
return new jQuery.fn.init();
};
jQuery.fn = jQuery.prototype = {
init: function() {
return this;
}
};
var j = jQuery();
console.log(j);
>> jQuery.fn.jQuery.init {}
在控制台中记录对象时,Chrome 会显示某种内部标识符,这取决于对象在代码中的设置方式。它是对象结构在创建对象的命名空间中的某种表示。如果您要反转 fn 和原型(即jQuery.prototype = jQuery.fn = {...
),它将打印为jQuery.fn.init
而不是jQuery.fn.jQuery.init
.
奇怪的是,如果你要添加类似数组的属性(就像 jQuery 一样),它会在控制台中以不同的方式显示对象。我已经尝试删除/添加属性,似乎添加一个length
具有数字类型值的splice
属性和一个具有函数类型值的属性,你会得到像数组一样显示在控制台中的对象(带方括号)。
var jQuery = function() {
return new jQuery.fn.init();
};
jQuery.fn = jQuery.prototype = {
init: function() {
return this;
},
length: 0,
splice: function(){}
};
jQuery.fn.init.prototype = jQuery.fn;
var j = jQuery();
console.log(j);
>> [init: function, splice: function]
所以,我认为我们不应该过多关注 Chrome 打印出对象“名称”的方式或它如何格式化它......