为什么String.prototype将它的对象记录为标准对象,而Array.prototype将其对象记录为标准数组?

时间:2014-09-27 06:59:29

标签: javascript string object prototype this

为什么String.prototype使用标准花括号和键值对记录字符串对象,而Array.prototype记录数组对象就像数组一样,带方括号和值?



String.prototype.test = function(){
    console.log(this); // logs { '0': 't', '1': 'e', '2': 's', '3': 't' }
};
var str = 'test';
str.test();
Array.prototype.test1 = function(){
    console.log(this); // [1,2,3,4]
};
var arr = [1,2,3,4];
arr.test1();




1 个答案:

答案 0 :(得分:3)

因为在方法调用中,this参数始终(以草率模式)转换为对象。你看到的是一个String对象,它是从"test"原始字符串值生成的。您调用方法的数组已经是一个对象,因此没有任何反应,您只需像以前一样获取数组。

如果您使用严格模式,则此演员表不会发生:

String.prototype.test = function() {
    "use strict";
    console.log(this);
};
var str = 'test';
str.test(); // logs "test"