13.面向对象(一)

87 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

什么是对象

我们一直在用对象 可是你真的理解对象吗,js中有一个说法是一切皆对象,其实这里说的应该是一切皆可看作对象

对象就是可以拥有属性和方法的一个集合 士兵就是一个对象,它拥有身高体重的属性,保家卫国,吃饭睡觉的动作方法

在座的各位都是对象,世界上的万物都可看作对象,所以说,编程世界多姿多彩

什么是面向对象

面向过程:面向过程专注于如何去解决一个问题的过程步骤。编程特点是由一个个函数去实现每一步的过程步骤,没有类和对象的概念

面向对象:专注于由哪一个对象来解决这个问题,编程特点是出现了一个类,从类中拿到对象,由这个对象去解决具体问题

对于调用者来说,面向过程需要调用者自己去实现各种函数。而面向对象,只需要告诉调用者,对象中具体方法的功能,而不需要调用者了解方法中的实现细节。

面向对象的三大特征:

  • 封装
  • 继承
  • 多态

需要理解的概念

属性:对象本身所拥有的
​
方法:对象能够做的事情【功能】
​
抽象:在所有的丢像中获取相同的特征的过程
​
封装:创建对象的过程
​
继承:从一个对象中获取另外一个对象的内容
​
重写:继承父级的方法之后,又对方法进行修改

创建对象的方式

  1. 字面量的方式
var car = { // 车对象
  // 属性
  color:'白色',
  width: '2000mm',
  height: '1500mm',
  brand:'BMW',
  price:'56W',
​
  // 方法
  run: function(){
    console.log( this.brand + '在路上行驶');
  },
  stop: function(msg){
    console.log(this.brand + '刹不住车了!' + msg);
  }
}; 
// 调用对象的属性
console.log(car.color); 
​
// 调用对象的方法
car.run('hello'); 
car.stop('hello');
  1. Object的方式
var car = new Object();
// 属性
car.width = '1500mm';
car.color = '白色';
car.brand = 'BMW';
// 方法
car.stop = function(){
  console.log(this.brand + '刹不住车了!');
}
car.run = function(){
  console.log( this.brand + '在路上行驶');
}
console.log(car.color); 
car.run();
  1. 在已经存在的对象上添加属性和方法
var arr = new Array();
// 给数组添加num属性
arr.num = 10;
// 给数组添加getNum方法
arr.getNum = function(){
  console.log(arr.num);
}
arr.getNum();

构造对象

1.1 什么是构造对象

当通过 new 关键字调用一个函数时,这个函数就可以称为构造函数

1.2 构造对象和函数的区别
  • 调用方式不同

普通函数只用 函数名 调用

构造函数通过 new 关键字 调用

  • 返回值不同

普通函数的返回值是函数体内 return 的结果

构造函数的返回值是 new 关键字 生成的对象

原型对象

所有函数都有一个原型对象 prototype,并且**只有函数**才拥有原型对象 prototype。

原型对象也是一个对象

原型对象和构造对象

1.1 原型对象 prototype

所有函数都有一个原型对象 prototype,并且只有函数才拥有原型对象 prototype。

原型对象也是一个对象

1.2 构造函数 constructor

函数的原型对象的构造函数 是这个函数自己。也就是

Object.prototype.constructor === Object;// true

1.3 实例化对象

  • 假如通过new 关键字从 **函数fun** 里创建的 **对象obj** ,可以把 obj 称为 fun 的实例化对象;
  • 通过字面量方式创建的对象可以称为 **Object** 的实例化对象;
  • 实例化对象和普通对象没有任何区别

1.4 proto

每个对象都拥有一个属性  __proto__ ,这是浏览器实现的属性,通过它可以访问到 构造函数constructor 上的 原型对象 prototype;

var obj = new Object();
obj.__proto__ === obj.constructor.prototype;// true
obj.__proto__ === Object.prototype;// true

1.5 new 关键字 创建对象时发生了什么

当使用 new 关键字从 Object 函数上新建一个对象 obj 时,

new 关键字会进行如下的操作:

  1. 创建一个空的简单JavaScript对象(即{});
  2. 将这个空对象的构造函数 constructor 设置为函数 Object
  3. 将步骤1新创建的对象作为this的指向 ;
  4. 把创建的对象返回给 obj