1、属性和方法封装
<script>
//创建一个类
var Book = function(id,bookname,price){
this.id = id;
this.bookname = bookname;
this.price = price;
}
//也可以通过在类的原型上添加属性添加属性和方法
//Book.prototype.display = function(){}
//或者 但是两者不能混用 容易被覆盖
Book.prototype = {
display:function(){
console.log(this.id+' / '+this.bookname+' / '+this.price);
}
}
//类静态公有属性(对象不能访问)
Book.isChinese = true;
Book.restTime = function(){
console.log('new Time');
}
//要使用类
var book1 = new Book(10,'javascript',50);
book1.display();
console.log(book1.isChinese);
console.log(Book.isChinese);
//book1.restTime();
Book.restTime();
</script>
2、闭包实现
<script>
var Book = (function(){
var bookNum = 0;
function checkBook(name){
console.log(name);
}
function _book(newId,newName,newPrice){
//私有属性
var name,price;
//私有方法
function checkID(id){}
//特权属性
this.getName = function(){
console.log( newName );
};
this.getPrice = function(){
console.log( newPrice );
};
this.setName = function(){};
this.setPrice = function(){};
//公有属性
this.id = newId;
//公有方法
this.copy = function(){};
bookNum++;
if (bookNum > 100)
{
throw new Error('我们仅出版100本书');
}
//构造器
this.setName(name);
this.setPrice(price);
}
_book.prototype = {
//静态公有属性
isJSBook:false,
//静态公有方法
display:function(){}
}
return _book;
})()
var b = new Book(11,'JavaScript 设计模式',50);
b.getName();
</script>
3、创建对象的安全模式
<script>
var Book = function(name,title,type){
//如果用new,则创建该对象
if (this instanceof Book)
{
this.name = name;
this.title = title;
this.type = type;
}else {//如果不是则重新创建对象
return new Book(name,title,type);
}
}
</script>