日期:2014-05-16  浏览次数:20408 次

两种写法发疑惑
上代码

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');

------解决方案--------------------
js里面函数也是对象,也是从Object来的,所有对象支持的操作函数也都支持
所以和静态什么的没关系,UpperName是对象Book的一个成员
------解决方案--------------------
LZ写错了吧?
Book.UpperName = function(){
}
应该是
Book.prototype.UpperName = function(){
}
吧?
如果是这样的话,每个实例的UpperName都是调用的作用域链上的对象的方法,也就是说所有实例共用同一个方法。