本帖最后由 u010090753 于 2013-05-03 15:08:05 编辑

解决方案 »

  1.   

    (1)创建一个新的对象,并让 this 指针指向它;(2)将函数的 prototype 对象的所有成员都赋给这个新对象;(3)执行函数体,对这个对象进行初始化操作;(4)返回(1)中创建的对象。new的时候大概执行了上面的那些操作,纯属从别地方抄的,。。不要问我为什么是先2再3,,你的代码已经证明了确实是先2再3.。
      

  2.   

    prototype本身就是在创建时使用的,而不是在运行的时候调用,当然要用也是可以,只是没有必要如果要在运行的时后新增方法就可以这样:
    function A() {
        this.showName = function() {
            // ...
        }
    }
      

  3.   

    原型链运行机制要理解需要相当的js基础
    prototype上的成员和构造出的对象上的成员不是一回事
    对象构造的过程是构造一个新对象并用新对象调用构造函数,但原型链上的成员并没有添加到对象上
    当访问对象成员时,先从对象自身查找该成员,若无再从其构造函数的prototype属性上查找,若无则查找Object的prototype,若仍然无则为undefined你这儿的问题是第一次构造时把原型链重置了,但该对象的原型对象在构造时已指定,这就造成对象上的原型与该函数当前的原型不是同一个对象,自然找不到新原型链上的成员。第二次调用的话将回复正常修改方法时不要重置对象,只是添加成员而已if(!A._init_) {
        A.prototype.showName = function(){
            return this.name;
        }
    }
    这样就可以了
      

  4.   


    又是原型的问题..哥只能再次拿出真藏的帖子了..
    http://www.cnblogs.com/RicCC/archive/2008/02/15/JavaScript-Object-Model-Execution-Model.html
    看去吧..讲的很详细..你理解了就明白了你的问题了
      

  5.   

    关键点:
    var a = new A(); //a.__proto__ = A.prototype; a.__proto__就是实例的原型.
    A.prototype = object; //A.prototype变了, a.__proto__却没有重新赋值 
      

  6.   


    第一次的
    console.log(A.prototype)
    和console.log(new A().__proto__)
    都是A{}
    第二次的才都是被重置后的Object{....}所以一开始A.prototype也没有被重置 跟a.__proto__一样都是没有重新赋值
      

  7.   

    http://blog.csdn.net/walkingmanc/article/details/6674554按照里面函数对象和普通对象的创建顺序,有点明白。创建函数对象,即function A(){....} 的时候 A.prototype已经默认决定是A{}了然后创建普通对象,即var a=new A()的时候,将A.prototype赋值给a.__proto__,此时a.__proto__也已经决定了是A{},接着初始化A整个函数体的操作会修改到A.prototype,使其变成自定义的Object,但这对前面一开始绑定好的A.prototype和刚刚赋值好的a.__proto__已经不能造成影响(此时的普通对象的本身包括其原型已经不会被重置操作),但是A.prototype仍然在第一个普通对象完成后被修改了,所以之后的每个实例的原型都是自定义Object而直接在原有的原型上添加属性或方法,则是属于晚绑定。结贴