var methods = {name:"aName",area:function(){return 88;},toString:function() {return "testToString";}};
    
    for(var p in methods){
        alert(p + " " + methods[p]);
    }
为什么methods对象的toString属性 不能够alert出来

解决方案 »

  1.   


    for(var p in methods){
         if(methods[p]=="aName")
               alert(p + " " + methods[p]);
            else
               alert(p + " " + methods[p]());}methods["toString"]取得的是一个指向函数的引用,alert出来只是函数的代码。
    需要加个括号()来将其执行。
      

  2.   


    for(var p in methods){
       if(!methods[p].hasOwnProperty("tostring"))
    {
      //dosomething    
    }
    }        试试
      

  3.   

    我是想重写toString方法,换函数名那就达不到原来的意图了
      

  4.   

    严格来说,toString是不可枚举的属性。
    JS/ECMAScript对象的属性,都具有一个布尔类型的[[Enumerable]]特性,为真时表示此属性可以在for in中被枚举,反之不能(ECMA-262)。
    而JS中内置对象的预定义属性貌似都是不可枚举的,所以对一个新建的空Object使用for in得不到任何属性。
    可以对一个对象调用propertyIsEnumerable()方法来查看其某属性是否支持枚举:
    var a = [0];
    alert(a.propertyIsEnumerable('length'));
    alert(a.propertyIsEnumerable(0));
    alert(a.propertyIsEnumerable(1));
      

  5.   

    尝试在for in之后添加额外的检测处理:
    var methods = {name:"aName",area:function(){return 88;},toString:function() {return "testToString";}};
    var methods2 = {name:"aName",area:function(){return 88;}};function enumTest(obj) {
    for(var p in obj){
    alert(p + ':' + obj[p]);
    }
    if (obj.toString != Object.prototype.toString) {
    alert('toString' + ':' + obj.toString)
    }
    }
    alert('methods:')
    enumTest(methods);
    alert('methods2:')
    enumTest(methods2);
      

  6.   

    重写toString只需要
    Object.prototype.toString = function(){
       // your code
    }
    就可以了啊。
      

  7.   


    有两个类class A和class B
    现在要做的就是想把classB里的所有属性(包括toString)复制到classA.
      

  8.   

    原型链继承啊~~~
    仔细看好下面的代码 function ClassB() {
    this.name = "Jee";
    }
    ClassB.prototype.toString = function(){
    return this.name;
    };
    function ClassA() {
    this.name = "JeeChang";
    }
    ClassA.prototype = new ClassB();
    var a = new ClassA();
    alert(a.toString());
      

  9.   

    我现在做的是类似继承,但不是继承!!!
    现在做的是鸭子类型(Duck Typing)(书上看的专业术语)
    只是借用其他类的方法,但是不继承
      

  10.   

    因为我想要classA 借用classB classC classD ... 的方法,(权重逐渐增加)
    类似于猴子掰玉米模式,比如 看到classB 有个toString方法 就拿了classB的方法用了,
    如果接下来看到classC 也有个toString方法 就马上用classC的toString方法了...
    诸如此类.