真是太疑惑了,请大家看看下面的实例及说明var Aa = function(){
    this.b = 2;
    this.c = "dfd";
    return "ghfh";
}
var b = new Aa();
alert(b.c)  //弹出"dfd",说明return没起作用,b是一个实例对象。var Aa = function(){
    this.b = 2;
    this.c = "dfd";
    var dd = function(){
        return "fdg"
    }
    return dd;
}
var b = new Aa();
alert(b()) //弹出"fdg",说明return起作用了,b是一个方法,既dd方法。这是为什么奈?

解决方案 »

  1.   

    alert(b.c) 
    b.c返回的是Aa里的属性c,而不是return的值alert(b())
    b是return值,也就是dd方法,b()就是dd()了
      

  2.   

    这不是看着结果描述过程吗?我的问题是:为什么一样是new Aa(),第一个b是实例,而第二个b是方法。
      

  3.   

    LZ  你第一个方法要是直接  ALERT(b);  不也就是返回的值吗?你ALERT b  里面的一个属性和  返回值有什么关系哦?
      

  4.   

    再比如说如果第二个b,用b.c的话,出的值就是undefined。
      

  5.   

    LZ,你的主要问题应该在this上
    var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        return "ghfh";
    }
    var b = new Aa();
    alert(b.c)  //弹出"dfd",说明return没起作用,b是一个实例对象。var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        this.dd = function(){
            return "fdg"
        }
    }
    var b = new Aa();
    alert(b.dd()) //弹出"fdg",说明return起作用了,b是一个方法,既dd方法。
      

  6.   

    比如我alert(第一个b),系统会告诉你是个对象。alert(第二个b),系统会告诉你是个方法。
    同样是实例化new Aa(),为什么会不一样!!!!
      

  7.   

     
    晕。 为什么说return没起作用?
    var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        return this.c="ghfh";
    }
    var b = new Aa();
    alert(b.c)  //弹出"dfd",说明return没起作用,b是一个实例对象。var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        var dd = function(){
            return "fdg"
        }
        return dd;
    }
    var b = new Aa();
    alert(b()) //弹出"fdg",说明return起作用了,b是一个方法,既dd方法。
      

  8.   

    var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        return "ghfh";
    }
    var b = new Aa();
    假设这个例子中,return起作用了,那b不就应该是字符串"ghfh"吗?
      

  9.   

    LZ,你NEW出来是可以的,试试var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        return "ghfh";
    }
    var b = new Aa();
    alert(Aa().c)
      

  10.   

    参见:http://www.jslab.org.cn?tag=ConstructorFunctionReturn
      

  11.   


    说反了,NEW出来是不可以的
      

  12.   

    LZ,看一下JavaScript高级程序设计的第三章中的作用域和对象基础应该就可以理解了
      

  13.   

    请问风大哥,constructor是什么属性,是保留字吗?
      

  14.   

    该链接http://www.jslab.org.cn?tag=ConstructorFunctionReturn指出,构造函数中,return只有返回的是对象或者函数,才会使return生效,如果return返回的是数字或者字符串(非对象),则return无效。
    这是小弟刚刚理解下来的,如果仍是错滴,请各位指教。
      

  15.   

    LZ看看这个
    var Aa = function(){
        this.b = 2;
        this.c = "dfd";
        return "ghfh";
    }
    var b = new Aa();
    alert(Aa())
      

  16.   

    我指的return生效都是对实例b而言。
      

  17.   

    一直误解了LZ的原意,汗http://cykit.javaeye.com/blog/72950
      

  18.   

    When the [[Construct]] property for a Function object F is called, the following steps are taken:
    1. Create a new native ECMAScript object.
    2. Set the [[Class]] property of Result(1) to "Object".
    3. Get the value of the prototype property of the F.
    4. If Result(3) is an object, set the [[Prototype]] property of Result(1) to Result(3).
    5. If Result(3) is not an object, set the [[Prototype]] property of Result(1) to the original Object prototype object as described in section 15.2.3.1.
    6. Invoke the [[Call]] property of F, providing Result(1) as the this value and providing the argument list passed into [[Construct]] as the argument values.
    7. If Type(Result(6)) is Object then return Result(6).
    8. Return Result(1).
    注意7 8
      

  19.   

    简单的可以理解为var p={};
    p.__proto__=Person.prototype;
    Aa.call(p);
    return (typeof p=='object')?p:Aa;
      

  20.   

    我猜你是c++或者别的编译语言过来的人。js的OOP方式叫做prototype,类似design pattern里那个prototype。和c++的class机制不一样,具体看我的教程:http://iamduyu.cn/?tag=javascript简单来说,function在js里有两种作用,不加new的时候,是普通函数调用,加new的时候类似于c++的class,是造对象的,造对象的时候return显然无意义,应该返回的是一个新的对象。