问下
var a = function() {
};
alert(a.toString());
alert(Object.prototype.toString.call(a));
这两种方法为什么不一样啊,有什么区别啊

解决方案 »

  1.   


    1)call是什么意思?
    2)Object.prototype.toString == a.toString 吗?
    3)a.toString 是从哪里来的?
      

  2.   

    alert(a)和alert(a.toString())是等效的,alert(a)的实质是alert(a.toString());
    这个alert(Object.prototype.toString.call(a))实际有应用吗?
      

  3.   


    alert(a.toString());
    // 按你给的代码, 那么上面这句相当于下面这个
    alert(Function.prototype.toString.call(a));
    // ------------
    // 那么, 如果下面2句你认为一样么?
    alert(Function.prototype.toString.call(a));
    alert(Object.prototype.toString.call(a));
      

  4.   

    var a = function() {
    };
    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方法吧?
    个人感觉
      

  5.   

    var a = {};
    a.b = {};
    a.b.c = {};alert(a["b.c"]);
    问下,为什么这样不可以呢?
      

  6.   

    a["b.c"];
    // 这样写会把"b.c"当成一个符串, 一个整体, 用 "b.c" 当成属性去 索引 Object a;
    a = {
        "b" : {
             "c": {}
        },
        "b.c" : undefined  // 你的代码里找的是这个属性
    }
      

  7.   

    var a = "afaf";
    a.toString()和toString.call(a)有什么区别啊?
      

  8.   

    明显是因为Function类重写了toString方法嘛
    alert(a.toString());
    alert(Function.prototype.toString.call(a));
    你这样就一定是相同的了
      

  9.   

    问下楼上大姐,var a = "afaf";
    a.toString()和toString.call(a)有什么区别啊? 
    这两句为什么不同啊?
      

  10.   

    你想要这样的结果吗?    
      var a = function() {
    };
    alert(a.toString());
    Object.prototype.toString.call(a);
    alert(Object.prototype.toString);
      

  11.   

    不是,就是问问a.toString()和toString.call(a)这两个结果为什么不同啊,感觉应该相同
      

  12.   

    a 指向的是一个function 那么它的原型就是Function对象因此如果你没有定义a的toString方法,那么a.toString() 调用的就是Function的toString而Object对象也有自己的toString方法,因此,当使用call来调用toString时,调用的就是Object的toString因为两个对象的toString方法是不同的,所以结果自然不一样
      

  13.   

    试试这个
    var a = {};
    alert(a.toString());
    alert(Object.prototype.toString.call(a));
      

  14.   

    var a = {};
    alert(String.prototype.toString.call(a));
    这样不行吧?
      

  15.   

    var a = function() {
    };
    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, 而不是重写后的时)