是的. 原函数原型里的局部变量, 局部函数在 prototype 都是调用不到的.
不过用 prototype 也有它的好处, 对象原型可以做得比较精小, 而后期扩展的灵活性增加

解决方案 »

  1.   

    好象这两种模式还是有些区别的, 特别是在用 apply call 时:
    T.prototype.PublicFunc2.call(); //调用正常.
    T.prototype.PublicFunc.call();  //这样调用会出错.
      

  2.   

    var col = T.prototype;
    //alert(col.constructor);for (func in col) {
    alert(typeof(col[func]));
    alert(col[func]);
    }输出的结果是:function------------------------------------------
    Microsoft Internet Explorer
    ---------------------------
    function() { alert('in public method 2.'); alert(this.Name); this.PublicFunc(); // 下面两行都会出错。在利用 prototype 扩展的方法里无法调用对象的私有方法,也访问不到通过 var 定义的私有成员。 // alert(x); // privateFunc();}
    ---------------------------
    确定   
    ---------------------------
      

  3.   

    我的理解是:prototype 对象相当于一个 wrapper. 他包装了你要附加的新的功能,透过接口提供给对象本身使用, 使得看上去好像是他本身的方法一样.比如调用 t.PublicFunc2 的时候,实际上是先找 t 的函数,没找到,然后到他的 prototype 里去找,发现了,于是就调用了.但是外部看来是感觉不到这个过程的,看上去像直接调用对象本身的方法一样。因为 prototype 下面没有老的那个函数 PublicFuc, 所以用 apply 方法调用不到.请指正.
      

  4.   


    x是一个变量,作用域仅在函数T()内部。而Name是构造函数通过this关键字创建的一个对象。
      

  5.   

    都写成这样了看着不难受的??我觉得编程还是大气一点儿的好,做为技术这个是一种选择方式我跟woyingjie说过要进行面向对象的编程,是一种整体化的思想,如果太追求面向对象了又不是正道了
      

  6.   

    我认为
    this为任何对象内建的一个隐式Object类型的变量
    prototype为任何对象内建的一个显式Object类型的变量当访问对象的变量时,先在隐式变量里寻找是否有该变量,再到显式里找,带"."的赋值语句其实是给对象添加对象的简写方式,被添加的对象和原对象的私有对象有各自的作用域<SCRIPT LANGUAGE="JavaScript">
    <!--function T()
    {
    var THIS = this;
    var aa = "0";
    this.aa = "1";
    this.bb = function(){alert("内部公共AA:" +THIS.aa)}
    this.cc = function(){alert("内部私有AA:" +aa)}
    }T.prototype.aa = "2";var t = new T();alert("调用时AA:" + t.aa); t.aa = "3";alert("赋值后AA:"+t.aa);
    alert("原形AA:" + T.prototype.aa);t.bb();
    t.cc();//-->
    </SCRIPT>
      

  7.   

    很早之前已经研究过了<script>
    T=(function () {
    function t(name){
    this.Name = name;
    }
    var x = 5; function privateFunc() {
    alert('in private method: do sometheing');
    } t.prototype.PublicFunc = function() {
    // 可以调用私有方法,访问私有成员变量。
    privateFunc();
    alert('x = ' + x);
    alert(this.Name)
    alert('in public method: do something else.');
    }
    return t
    })()var a = new T('forbes');
    a.PublicFunc()
    </script>
      

  8.   

    使用原形添加的方法,其内部this不是此function内部的this,而是原形对象的this
    T.prototype.dd = function()
    {
    alert("调用隐式:" + this.aa);
    }t.dd();
      

  9.   

    谢谢 ttyp 和阿信,当我了解的更清楚了。
    阿信可以写一些关于下列问题的解释或者心得么?或者给一些参考。很是期待。eval, prototype, constructor, call, caller, apply ...
      

  10.   

    也没有什么好些,caller,callee等我已经不用了,他已经不是ECMA263标准,eval也是迫不得已才用.
    call和apply还是比较好用方便的,能够把function直接应用于某个object上. 其实oo在js(客户端脚本)的意义上也不是很大,我只用它为站点设一个比较好的容器