var 为JS 定义变量的, 定义后赋值, 变量类型由赋值的类型决定,
this 也就相当于JAVA中的 this
prototype 是指调用对象的原形,也就相当于函数来调用属性
只是个人见解,可能有误。继续学习中... 

解决方案 »

  1.   

    this 对象实例本身
    var 变量声明
    prototype 方法定义
      

  2.   

    var:
    就是定义变量。在你这里的意思是定义一个函数引用insertIter,指向一个匿名函数。
    由于是在函数内部定义,作用域也在函数内部,所以外部无法访问这个函数。
    var bt = new BinaryTree();
    bt.insertIter()是错误的。外部无法访问。
    你可以将其理解为c++中的private函数this:
    this代表当前的上下文环境。
    如果用this.inertIter = function(...)
    var bt = new BinaryTree();
    bt.insertIter()是正确的。外部可以访问。prototype:
    prototype表示原型对象,这个话题可多了。
    与上面调用类似,外部可以调用。
    但是很重要的区别在于:this定义的函数是在new的时候将匿名对象引用插入到每个对象中。
    而prototype定义的函数是定义的时候copy函数的引用到对象中。前者中每个对象都有自己的函数体,后者都是指向prototype中的引用。
    故一般定义类的时候都用prototype,这样对象多的时候,函数体也才一个。
      

  3.   

    var 定义的变量是局部的,类的其他函数里无法访问,但用prototype定义的可以比如
    var   treeRoot_;    
        var   insertIter   =   function(data)
        {
          *****    
        } 如果在你在外面用下面语句定义类的另一方法
    treeRoot.prototype.other=function(){
    }
    那么它是无法访问你定义的变量 insertIter 的但通过prototype可以
      

  4.   


    多谢各位解惑在阅读了宝典<Profesional Professional> 和 "悟透javascript" 之后, 更加理解了其中的奥妙
      

  5.   

    var:
    就是定义变量。在你这里的意思是定义一个函数引用insertIter,指向一个匿名函数。
    由于是在函数内部定义,作用域也在函数内部,所以外部无法访问这个函数。
    var bt = new BinaryTree();
    bt.insertIter()是错误的。因为insertIter方法不是bt的成员变量,而且insertIter只能在其作用域内使用。外部无法访问。
    this:
    this代表当前的上下文环境。
    如果用this.inertIter = function(...)
    var bt = new BinaryTree();
    bt.insertIter()是正确的。外部可以访问。prototype:
    prototype表示原型对象,这个话题可多了。
    与上面调用类似,外部可以调用。
    但是很重要的区别在于:this定义的函数是在new的时候将匿名对象引用插入到每个对象中。
    而prototype定义的函数是定义的时候copy函数的引用到对象中。前者中每个对象都有自己的函数体,后者都是指向prototype中的引用。
    故一般定义类的时候都用prototype,这样对象多的时候,函数体也才一个。