- 面向对象基础
- @1 OOP思想:对象、类、实例
- @2 JS语言本身就是基于类和实例构建和组成的
- @3 普通函数执行 VS 构造函数执行
- hasOwnProperty VS in
- instanceof
- 编程语言:
-
+ 面向过程 POP [Process Oriented Programming] :C语言 编程语言之母 -
+ 面向对象 00P [Object Oriented Programming] -
+ JAVA 编程语言之父 -
+ javaScript -
+ PHP/Python/Ruby/Go/C#(ASP.NET)/C++/VB... - 面向对象是一个非常伟大的编程思想,而JS就是基于这个思想构建出来的一门编程语言,所以在JS中存在:对象、类、实例 三个概念!!
- @1 对象:JS中一切我们学习和使用的东西都是对象(研究对象),它是一个泛指,"万物皆对象"
- @2 类:按照特征特点,把东西进行归纳分类[大类(父类)->下面的小类(子类)]而且类一定会赋予它每个成员一些公共的属性和方法;
- @3 实例:具体的事物,类中的每一个具体成员; 每一个实例都具备一些自己独有的属性和方法(私有的特征),也会具备类赋予它的公共属性和方法(公有的特征)!!
- JS中的内置类:
-
- 每一个数据类型值都有一个自己所属的内置类:Number类(每一个数字都是他的实例)、String类、Boolean类、Symbol类、BigInt类、Object类、Aarry类、RegExp类、Date类、Error类、Function类
-
- 每一个元素标签都有一个所属的内置类,
-
例如: -
div ->HTMLDivElement -> HTMLElement ->Element ->Node -> EventTarget ->Object -
p ->HTMLParagraphElement -> HTMLElement ->Element ->Node -> EventTarget ->Object -
- 每一个类赋予其实例的公共属性方法,在类的原形对象上,例如:Aarry.prototype
- 类 :构建函数/构造器 constructor
- 自定义类:创建一个函数,执行的时候用"new"来执行,这样这个函数就是类(构造函数),返回的结果是这个类的一个实例对象
- New跟普通栈执行的区别
- 1.私有上下文产生后进来的第一件事情:创建这个类的实例对象
- 2.指向创建的实例对象
- 3,this.xxx=xxx都是给当前实例对象设置的私有属性和方法
- 4.如果函数没有写返回值,或者返回的是原始值类型的值,默认都是把创建的实例化对象返回了;如果自己返回的是对象类型值,才是以自己的返回值为主;
- 5.new不加小括号也是和上面一样,把它执行了,区别是不能传递实参
/
function Fn(x, y) {
let sum = 10;
this.total = x + y;
this.say = function () {
console.log(我计算的和是:${this.total});
};
// return {name:'哈哈哈'};
}
/ let res = Fn(10, 20); //普通函数执行
console.log(res);//undefined
console.log(window.total,window.say); */
let f1 = new Fn(10, 20); //构造函数执行 Fn类 返回值f1是它的返回值
/* console.log(f1); console.log(f1.sum);//undefined console.log(f1.total);//30 */
let f2 = new Fn;//不加小括号也是和上面一样,把它执行了,创在Fn类的一个实例f2,区别是不能传递实参 console.log(f1 === f2);//false 都是单独的实例 console.log(f1.say === f2.say);//false this.xxx=xxx都是给实例设置的私有属性
// 这种方式被称之为"构造函数设计模式":可以自定义类,和创造类的实例