/* JavaScript的函数作用域,声明在函数内部的变量以及方法在外界是访问不到的,
通过此特性即可创建类的私有变量以及私有方法。
然而在函数内部通过this创建的属性和方法,在类创建对象时,每个对象自身都拥有一份并且可以在外部访问到。
因此通过this创建的属性可看作是对象共有属性和对象共有方法,
而通过this创建的方法,不但可以访问这些对象的共有属性和共有方法,
而且还能访问到类(创建时)或对象自身的私有属性和私有方法,
由于这些方法的权利比较大,所以我们又将它看作特权方法。
在对象创建时通过使用这些特权方法我们可以初始化实力对象的一些属性,
因此这些在创建对象时调用的特权方法还可以看作是类的构造器。
*/
var Book = function (id, name, price) {
// 私有属性
var num = 1;
// 私有方法
function checkId () {
}
// 特权方法
this.getName = function () {};
this.getPrice = function () {};
this.setName = function () {};
this.setPrice = function () {};
// 对象公有属性
this.id = id;
// 对象公有方法
this.copy = function () {};
// 构造器
this.setName(name);
this.setPrice(price);
}
// 类静态公有属性(对象不能访问)
Book.isChinese = true;
// 类静态公有方法(对象不能访问)
Book.resetTime = function () {
console.log('new time');
}
Book.prototype = {}
// 公有属性
isJSBook: false,
// 公有方法
display: function () {}
}
/*
通过new关键字创建的对象实质是对新对象this的不断赋值,
*/
var b = new Book(11,'JavaScript设计模式',50);
console.log(b.num); // undefined
console.log(b.isJSBook); // false
console.log(b.id); // 11
console.log(b.isChinese); // undefined