上代码var Book = (function(){
    //静态 私有变量 
    var _version = '1.0';
    //  静态私有函数
    function checkISBN(str){
        return true;
    }
  
    return function(name,author,isbn){
        //私有变量
        var _name,_author,_isbn;
        //特权函数 可以访问私有变量
        this.getName = function(){
            return _name || 'Null';  
        };
        
        this.getAuthor = function(){
            return _author || 'Null';
        };
        
        this.getISBN = function(){
            return _isbn || 'Null';
        };
        
        this.setName = function(str){
            _name = str;  
        };
        
        this.setAuthor = function(str){
            _author = str;
        };
        
        this.setISBN = function(str){
            if(checkISBN(str))_isbn = str;
        };
        
        this.setName(name);
        this.setAuthor(author);
        this.setISBN(isbn);  
    };
}());
//这个UpperName是静态 public的函数?还是每个实例都有一份内存
Book.UpperName = function(){
}var b = new Book('Roses of lights','JK','ISBN-234234456-345345');

解决方案 »

  1.   

    js里面函数也是对象,也是从Object来的,所有对象支持的操作函数也都支持
    所以和静态什么的没关系,UpperName是对象Book的一个成员
      

  2.   

    LZ写错了吧?
    Book.UpperName = function(){
    }
    应该是
    Book.prototype.UpperName = function(){
    }
    吧?
    如果是这样的话,每个实例的UpperName都是调用的作用域链上的对象的方法,也就是说所有实例共用同一个方法。
      

  3.   


    如果是Book的成员,那么也就是那个内嵌函数的成员吧。相当于在内嵌函数里面写this.func = function(){}么?那这个func属性是私有的么?
      

  4.   


    其实这里_version和checkISBN都类享有的,所有实例共有一份的、
    我知道prototype的写法。这里只是向搞清楚。func是否和CheckISBN一样都是静态私有的
      

  5.   

    厄,没太注意这点代码写法还有点特殊,不过没什么区别。你写的Book.xxx=xxx;那xxx就是Book的成员这是肯定的,当然Book的确是那个被return的function;但后面你就说错了,UpperName只是Book对象的成员,与Book函数构造出的对象无关
    js里面类机制基于对象,可以认为无专门的类机制,所以不存在静态成员,公有私有成员的概念,这些概念通通只是为了方便理解,其实通通没有。比如所谓私有变量,不过是作用域的关系外部无法访问而已,根本不涉及访问权限
      

  6.   


    真纠结啊。。UpperName只是Book对象的成员,与Book函数构造出的对象无关
    能否说下 Book对象 和 Book函数构造出的对象的差别么再次感谢大大了真纠结啊。。UpperName只是Book对象的成员,与Book函数构造出的对象无关
    能否说下 Book对象 和 Book函数构造出的对象的差别么再次感谢大大了
      

  7.   

    你觉得纠结只是因为没能把函数真正当做一个对象来理解罢了
    函数也是对象,其构造函数为Function,你可以用
    var Book = new Function(参数,[参数,...],代码); 构造出一个函数对象
    这样再写Book.xxx = 'xxx';你是否就不会疑惑了呢?
    至于再用Book函数构造新对象
    var b = new Book();
    显然对象Book由Function构造,而对象b由Book构造,两者由不同的构造函数生成,它们各自的成员当然没有什么关系了
      

  8.   

    lz你的写法 混淆了。
    估计你是在学习 私有变量
    你的定义 :有个  静态私有变量 ,静态 是 依附于 prototype属性而言的,因为该对象的实例都是共享的。但你的程序里  ,并没有利用该属性定义。按照你的写法 该方法 是实例方法 ,不是共享一个