上代码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');
//静态 私有变量
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');
所以和静态什么的没关系,UpperName是对象Book的一个成员
Book.UpperName = function(){
}
应该是
Book.prototype.UpperName = function(){
}
吧?
如果是这样的话,每个实例的UpperName都是调用的作用域链上的对象的方法,也就是说所有实例共用同一个方法。
如果是Book的成员,那么也就是那个内嵌函数的成员吧。相当于在内嵌函数里面写this.func = function(){}么?那这个func属性是私有的么?
其实这里_version和checkISBN都类享有的,所有实例共有一份的、
我知道prototype的写法。这里只是向搞清楚。func是否和CheckISBN一样都是静态私有的
js里面类机制基于对象,可以认为无专门的类机制,所以不存在静态成员,公有私有成员的概念,这些概念通通只是为了方便理解,其实通通没有。比如所谓私有变量,不过是作用域的关系外部无法访问而已,根本不涉及访问权限
真纠结啊。。UpperName只是Book对象的成员,与Book函数构造出的对象无关
能否说下 Book对象 和 Book函数构造出的对象的差别么再次感谢大大了真纠结啊。。UpperName只是Book对象的成员,与Book函数构造出的对象无关
能否说下 Book对象 和 Book函数构造出的对象的差别么再次感谢大大了
函数也是对象,其构造函数为Function,你可以用
var Book = new Function(参数,[参数,...],代码); 构造出一个函数对象
这样再写Book.xxx = 'xxx';你是否就不会疑惑了呢?
至于再用Book函数构造新对象
var b = new Book();
显然对象Book由Function构造,而对象b由Book构造,两者由不同的构造函数生成,它们各自的成员当然没有什么关系了
估计你是在学习 私有变量
你的定义 :有个 静态私有变量 ,静态 是 依附于 prototype属性而言的,因为该对象的实例都是共享的。但你的程序里 ,并没有利用该属性定义。按照你的写法 该方法 是实例方法 ,不是共享一个