OOP 指什么?有哪些特性
Object oriented programming 的缩写,面向对象的程序设计,其中最重要的两个概念是类和对象
类:
具备某些属性和方法的模型,有点像零件图纸。
对象:
把类实例化后就是一个个对象,就像依照图纸加工出一个个零件。
面向对象有三个特性
-
继承性:
子类自动继承父类的属性和方法,并可以添加新的属性和方法,或者对部分属性和方法进行重写。继承增加了代码的可重用性。 -
封装性:
把类的属性和方法封装起来,暴露接口,使用方便 -
多态性
多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,多态性增强了软件的灵活性
通过构造函数的方式创建一个拥有属性和方法的对象
var Cat = function(){
this.种类 = "猫" //创建自身的属性
}
Cat.prototype.say = function(){
console.log("喵喵喵"); //在原型链上创建方法
}
var cat = new Cat()
console.dir(cat)
prototype 是什么?有什么特性
- 每一个函数在创建之后都会拥有
prototype
的属性,这个属性指向函数的原型对象
- 原型对象可视为公共区域,默认含有
constructor
、__proto__
这两个属性 - 使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法,通常我们可以将实例对象的公共属性和方法放在
prototype
对象中
特性:
- 用来实现基于原型的继承与属性的共享
- 所有对象都有
__proto__
,指向其构造函数的prototype
obj.__proto__ === Object.prototype //true
- 构成原型链,同样用于实现基于原型的继承,例:访问一个对象的属性时,如果在obj中找不到,那么就会沿着
__proto__
依次查找,直到找到这个属性或null
画出如下代码的原型图
function People (name){
this.name = name;
this.sayName = function(){
console.log('my name is:' + this.name);
}
}
People.prototype.walk = function(){
console.log(this.name + ' is walking');
}
var p1 = new People('饥人谷');
var p2 = new People('前端');
创建一个 Car 对象,拥有属性name、color、status;拥有方法run,stop,getStatus
var Car = function(name, color, status){
this.name = name
this.color = color
this.status = status
}
Car.prototype.run = function(){
console.log("跑啊跑");
}
Car.prototype.stop = function(){
console.log("停下来");
}
Car.prototype.getStatus = function(){
console.log(this.status);
}
var car = new Car("兰博基尼", "金色", "100m/s")
console.dir(car)
car.name //兰博基尼
car.color //金色
car.run() //跑啊跑
car.stop() //停下来
car.getStatus() //100m/s
创建一个 GoTop 对象,当 new 一个 GotTop 对象则会在页面上创建一个回到顶部的元素,点击页面滚动到顶部。拥有以下属性和方法
ct
属性,GoTop 对应的 DOM 元素的容器
-
target
属性, GoTop 对应的 DOM 元素 -
bindEvent
方法, 用于绑定事件 -
createNode
方法, 用于在容器内创建节点