面向对象.md

JavaScript / 2022-03-08

#面向对象

function user(){
  var name = "";
  var age = "";
  var eat = function(){
    
  }
}

user = {
  name:"",
  age:"",
  eat:function(){
    
  }
}

类:具有一系列相同特征和行为的事物统称

对象

对象是类的实例
对象是javascript的核心概念,也是最重要的数据类型, Javascript所有的数据都可以看作为对象,简单的说:所谓的对象,就是一种数据的集合,由若干个"键值对"构成

var person = {
  name: '赵天韡',
  age: 30,
  eat:function eat(){console.log('我会吃饭');}
}
var a = 1;
var b = 1

var sum = a+b;
console.log(sum);

var sum = {
  num1: 0,
  num2: 0,
  add: function add(){
    return num1+num2;
  }

  chu: function chu(){
    return num1/num2
  }

  cheng: function cheng(){}
}

sum.num1 = 2;
sum.num2 = 2;
sum.add();

sum.add();
sum.chu();
var num1 = 1;
var num2 = 1;
var result = num1 + num2;
console.log(result);
}

对象是包含相关属性和方法的集合体:
组成部分:

  • 属性
  • 方法

类和对象的关系:

类是抽象的,对象是具体的(类是对象的抽象化,对象是类的具体化)

面向对象

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

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

面向对象也即是OOP,Object Oriented Programming,是计算机的一种编程架构,OOP的基本原则是计算机是由子程序作用的单个或者多个对象组合而成,包含属性和方法的对象是类的实例,但是JavaScript中没有类的概念,而是直接使用对象来实现编程。

面向对象语言的三大特性

封装

能够将一个对象的信息、功能、响应都封装到一个单独对象中。

var student = {
  name: '刘',
  age: 1,
  study: function study(){
    console.log('我在学习');
  }
}
继承

在不改变源程序的基础上进行扩充,原功能得以保存,并且对子程序进行扩展,避免重复代码编写.

多态

普通方法

基于Object对象的方式创建对象
语法:

var 对象名称=new Object( );
对象名称.属性key值 = 属性值;
var person = new Object();
person.name = '赵天韡'

console.log(person);

使用字面量赋值方式创建对象

语法:

var 对象名称 = {
  属性key值:属性值
}
var person = {
  name:'赵天韡'
}

工厂模式创建对象

语法:

class Store{
  
}


function fobj(参数1,参数2,count){
  var temp = [];
	for(index=0;index<=count;index++){
    var store=new Store();
		store.属性1=参数1;
		store.属性2=参数2;
    temp.push(store);
  }
		return temp;
	}

fobj("11",22,100)
var mobj=fobj(值1,值2)

构造函数

构造函数创建对象

构造函数其实和普通函数本质上并无区别,唯一的区别有两个:

  • 函数首字母大写,这个区别只是约定俗成的,便于区分。你实在要小写定义构造函数也完全没问题,所以这个区别可以忽略。
  • 构造函数的调用需要用new操作符,而普通函数的调用又分很多种,但是都不会用到new操作符。

语法:

function Student(namne,age){
		this.name='';
		this.age=0;
}

student('',19)

  var student=new Student('马争',18);

  window.Student('马争',18)

  var object = new Object();
  window.Student('马争',18)   <==> object.Student('马争',18)


Javascript 原型

在javascript中,函数可以有属性。 每个函数都有一个特殊的属性叫作原型(prototype)

function add(a,b){   <===>  prototype{}
  return a+b;
}
//doSomething 函数有一个默认的原型属性

function doSomething(){}
console.log( doSomething.prototype );
var doSomething = function(){};
console.log( doSomething.prototype );

原型链

如何准确判断一个变量是数组类型

写一个原型链继承的例子

描述new一个对象的过程

new 操作符

构造函数和普通函数的区别就在这个new操作符里,用new操作符创建对象时发生的事情:

  • 第一步: 创建一个Object对象实例。
 new Object()
  • 第二步: 将构造函数的执行对象赋给新生成的这个实例。
// window.Person()
Object.Person()
  • 第三步: 执行构造函数中的代码
this.name = name; <==> Object.name = name
  • 第四步: 返回新生成的对象实例

注意:如果被调用的函数没有显式的 return 表达式(仅限于返回对象),则隐式的会返回 this 对象, 也就是新创建的对象。

hasOwnProperty()方法的作用

继承

构造函数继承

原型链继承

组合继承