// var Book = function(id,bookName,price) {
// this.id = id;
// this.bookName = bookName;
// this.price = price;
// }
// 如果不使用new创建对象,而直接调用,就会给window对象添加属性
// var b = Book(1,'一号',5.2)
// console.log(b.id)
// console.log(window.id)
// 解决办法:
// var Book = function(id,bookName,price) {
// if(this instanceof Book) {
// this.id = id;
// this.bookName = bookName;
// this.price = price;
// } else {
// return new Book(id,bookName,price)
// }
// }
// var b = Book(1,'一号',5.2)
// console.log(b.id)
// console.log(window.id)
// Book.prototype.a = 1
// console.log(Book.a)
// var book = new Book(2,'二号')
// console.log(book.id)
// console.log(book.bookName)
// console.log(book.a)
// 私有:只能在类或对象内部访问 共有:可在类或对象外部访问
// var Book = function(id,name) {
// // 类的私有属性:只能在类内部访问
// var num = 1
// // 类的私有方法
// function checkId() {
// }
// // 对象共有属性:只能被实例对象访问
// this.id = id
// // 对象共有方法:只能被实例对象访问
// this.getName = function() {}
// this.setName = function(name) {
// this.name = name
// }
// // 类的构造器
// this.setName(name)
// }
// Book.x = '40cm' // 类的静态共有属性:只能被类访问
// Book.y = '60cm'
// Book.prototype.z = '10cm' // 共有属性:可被类或实例对象访问
// var book = new Book(1,'一号')
// console.log(book.z)
// console.log(Book.num)
// var BB = (function() {
// var idx = 1 // 类的静态私有属性
// var namex = 'bb'
// return function(id,name) {
// var idy = 2
// this.id = id + idx
// idx++
// this.name = name
// }
// })()
// BB.prototype.type = 33
// console.log(BB)
// const bb1 = new BB(3,'三号')
// console.log(bb1.id)
// const bb2 = new BB(3,'三号')
// console.log(bb2.id)
// console.log(bb2.type)
// console.log(BB.idx)
// var CC = (function() {
// var idx = 2
// function cc(id) {
// this.id = idx + 1
// idx++
// }
// cc.prototype.getId = function() {
// return this.id
// }
// return cc
// })()
// console.log(CC)
// const cc1 = new CC(1)
// console.log(cc1.id)
// console.log(cc1.getId())
console