1. 面向对象编程就是将你的需求抽象成一个对象,然后针对这个对象分析其特征(属性)与动作(方法)。这个对象我们称之为类。
面向对象----封装
1、创建一个类
a. 首先声明一个函数保存在一个变量里
b. 按编程习惯一般这个代表类的变量首字母大写
c. 然后在这个函数(类)的内部通过对this(函数内部自带的一个变量,用于指向当前对象)添加属性或方法
例如:
var Book = function(id,bookname,price){
this.id = id;//通过this添加的属性,会在每次new实例化对象时创建。会多次创建
this.bookname = bookname;
this.price = price;
}
// 也可以通过在类的原型上添加属性和方法,有两种方法:
// 1.一一为原型对象属性赋值
Book.prototype.display = function(){
//展示这本书
}
// 2.将一个对象赋值给类的原型对象
Book.prototype = {
display:function(){
//展示这本书
}
}
//当使用功能方法时不能直接使用这个Book类,需要用new关键字来实例化创建新对象。
var book = new Book(111,'书名',50);
console.log(book.bookname);
2. 原型prototype跟对象constructor
prototype是对象的原型,在prototype中添加的属性不是对象自身的,需要通过prototype一级一级查找继承,不会新建。
constructor是对象原型prototype中创建的属性,他指向这个类对象本身。
var Book = function(id,name,price){
// 私有属性
var num = 1;
// 私有方法
function checkId(){};
// 特权方法 (new实例化时复制到新创建对象上)
this.getName = function(){};
this.getPrice = function(){};
this.setName = function(){};
this.setPrice = function(){};
// 对象公有属性
this.id = id;
// 对象公有方法
this.copy = function(){};
// 构造器
this.setName(name);
this.setPrice(price);
}
// this上的属性跟方法,new出的新对象可以访问。
// 在类外面用点语法添加的属性和方法,new对象不能访问
// 类静态公有属性(对象不能访问)
Book.isChinese = true;
// 类静态公有方法(对象不能访问)
Book.resetTime = function(){
console.log('newTime');
};
// 类通过prototype创建的属性跟方法在示例对象中是可以通过this访问到的。称为共有属性/方法
Book.prototype = {
// 共有属性
isJSBook : '是的',
// 共有方法
display : function(){}
}
var b = new Book(11,'书名',50);
console.log(b.num);//undefined num是Book的私有属性 对象无法访问
console.log(b.isJSBook);//是的 prototype上的属性方法可以访问 共有属性方法
console.log(b.id);//11 对象能访问 this上的属性方法 公有属性方法
console.log(b.isChinese);//undefined 对象无法访问 通过点添加的类静态属性方法
// 类的静态公有属性方法可以通过类的自身访问
console.log(Book.isChinese);//true
Book.resetTime();//newTime 类自身访问