(1)“这句话表明在fTest.prototype中有一个变量为name,然后oTest1和oTest2全部指向他”这句话说的不太恰当,应该是“fTest.prototype中有一个叫name的属性,属性值为hello,且该属性被对象oTest1和oTest2共享”;
(2)oTest1中肯定会有name属性啊,你自己不都说了“我的理解是两个共有的一个属性”。

解决方案 »

  1.   

    嗯。当然提问急了,没写全,其实问题就是现在上面的代码运行的时候,测试oTest1.hasOwnProperty("name");返回的是false,就是说这个name属性是在fTest.prototype,而不再实例中的,然后我再调用了setname方法之后,再测试这个oTest1.hasOwnProperty("name");这个时候他返回的是true,就是在实例中有了一个name的属性,我其实问的就是是不是这个setname的方法给实例添加了name属性,?
      

  2.   

    嗯。当然提问急了,没写全,其实问题就是现在上面的代码运行的时候,测试oTest1.hasOwnProperty("name");返回的是false,就是说这个name属性是在fTest.prototype,而不再实例中的,然后我再调用了setname方法之后,再测试这个oTest1.hasOwnProperty("name");这个时候他返回的是true,就是在实例中有了一个name的属性,我其实问的就是是不是这个setname的方法给实例添加了name属性,?

    对的~
    settime里面那不是都写着吗---“this.name = name”,this指向的就是实例化对象。
      

  3.   

    这句话有问题:
    fTest.prototype.getname = function(){
        console.log(this.name);
    };
    因为调用的时候是这样调用的:
    oTest1.setname("dummy");
    setname是一个函数对象,函数体直到执行的时候,this 才会确定,而且总是等于调用该函数的对象,就是点号前面的第一个值(如果window.myObject.func(),那么也是指向直接调用func的myObject而不是window).
    虽然js内部的搜索策略回去找 prototype 的 setname, 但显式调用时用的是 oTest1,这就决定你的 this 会指向 oTest1.