我已经阅读了一些材料,并且在语法方面完全掌握了这个概念,如下所示:
textarea.selectionEnd
第2行和第3行有何不同?据我所知,两者都调用toString方法,当前对象被设置为' arrObj'。
答案 0 :(得分:12)
由于toString
中定义了Object.prototype
,所以继承Object
的任何人都会默认使用toString
方法。
但是,Array
个对象会覆盖默认的toString
方法,以将数组元素打印为逗号分隔的字符串。
Object.prototype.toString
不知道它实际处理的对象类型。因此,它有意保持通用,并始终打印对象的实际类型。这就是为什么
console.log(Object.prototype.toString.call(arrObj));
打印
[object Array]
这是传递的对象的类型。但是,当你执行arrObj.toString
时,你试图用它的String形式表示数组,因此在toString
对象中覆盖Array
以将数组元素打印为逗号分隔的字符串。
这就是为什么两个电话都不同。
但是在其他对象的情况下,toString
未被覆盖,因此他们将使用toString
中的Object.prototype.toString
。例如,
var obj = {
1: 2
};
console.log(obj.toString());
// [object Object]
示例
答案 1 :(得分:6)
toString
是overridden for Arrays;和
Object.prototype.toString
与Array.prototype.toString
不同。
要使用call
获得相同的结果,请在“正确”方法上使用它:
Array.prototype.toString.call(arrObj); // Gives "1,2,3"