a 指向的是一个function 那么它的原型就是Function对象因此如果你没有定义a的toString方法,那么a.toString() 调用的就是Function的toString而Object对象也有自己的toString方法,因此,当使用call来调用toString时,调用的就是Object的toString因为两个对象的toString方法是不同的,所以结果自然不一样
试试这个 var a = {}; alert(a.toString()); alert(Object.prototype.toString.call(a));
var a = {}; alert(String.prototype.toString.call(a)); 这样不行吧?
1)call是什么意思?
2)Object.prototype.toString == a.toString 吗?
3)a.toString 是从哪里来的?
这个alert(Object.prototype.toString.call(a))实际有应用吗?
alert(a.toString());
// 按你给的代码, 那么上面这句相当于下面这个
alert(Function.prototype.toString.call(a));
// ------------
// 那么, 如果下面2句你认为一样么?
alert(Function.prototype.toString.call(a));
alert(Object.prototype.toString.call(a));
};
Function.prototype.toString=function(){
return "function";
}
Object.prototype.toString=function(){
return "object";
}
alert(a.toString());
alert(Object.prototype.toString.call(a));
alert(a.toString()); 调用的是Function的toString
alert(Object.prototype.toString.call(a));调用的是Object的toString
Function可能重写了Object的toString方法吧?
个人感觉
a.b = {};
a.b.c = {};alert(a["b.c"]);
问下,为什么这样不可以呢?
// 这样写会把"b.c"当成一个符串, 一个整体, 用 "b.c" 当成属性去 索引 Object a;
a = {
"b" : {
"c": {}
},
"b.c" : undefined // 你的代码里找的是这个属性
}
a.toString()和toString.call(a)有什么区别啊?
alert(a.toString());
alert(Function.prototype.toString.call(a));
你这样就一定是相同的了
a.toString()和toString.call(a)有什么区别啊?
这两句为什么不同啊?
var a = function() {
};
alert(a.toString());
Object.prototype.toString.call(a);
alert(Object.prototype.toString);
var a = {};
alert(a.toString());
alert(Object.prototype.toString.call(a));
alert(String.prototype.toString.call(a));
这样不行吧?
};
alert(a.toString());
alert(Object.prototype.toString.call(a));alert(Function.toString.call(a));//与a.toString()为同一方法
alert(a.toString === Function.toString);//true, 更能说明这一点a.toString = function(){alert('重写')}//重写之后
alert(a.toString === Function.toString);//false, 被重写之后,var b = [];
alert(typeof b);//object
alert(Object.prototype.toString.call(b));//[Object Array],
//1. 当你想知道某一对象的具体类型时很有用(特别是javascript的内置类(Date, Function, RegExp等)!
//2. 当你想调用原型中的方法,而不是重写后的方法时(如想调用a继承的toString, 而不是重写后的时)