两种写法发疑惑
上代码
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都是调用的作用域链上的对象的方法,也就是说所有实例共用同一个方法。