JS面向对象

什么是面向对象

类:有了类,就可以创建对象,类名都会大写(为了和变量名区分)
对象:是通过类创建出来的

学习面向对象,就是学习如何通过类创建对象。
特征:
(1)封装 可以把很多属性和方法封装在一起。
(2)继承 一个子类可以继承父类中的属性和方法。
(3)多态 …

一、JS中创建对象的两种方式

1.通过字面量创建

仅仅JS才有,在JAVA中,对象都是new出来的。

<script>
	// 通过字面量的形式创建对象 
	let obj2 = { name:"wc" }
	obj2.age = 110; 
	console.log(obj2.name) 
	console.log(obj2.age)
</script?

2.通过new一个类

<script>
	// 通过new一个类去创建对象
	let obj = new Object(); 
	obj.name = "xq"; 
	obj.age = 111; 
	console.log(obj.name); // {} 
	console.log(obj.age); // {}
</script?

二、JS中内置的类

在JS中提供了很类,有了这些类,就可以创建对象,类如下:

  • Number类
  • String类
  • Boolean类
  • Object类
  • Array类
  • Date类 …

1.Number类:

new Number(); new一个是运算符 创建出一个对象
instanceof instance本意是实例(对象)的意思 是一个运算符
num1 instanceof Number
表示测试num1是否由Number创建的出来的
或者说 测试num1是否是Number的实例
如果是就返回true 否则返回false

2.String类:

new String();
还需要使用一个变量来引用这个对象

let xx = new String(“hello”);
xx叫:对象 实例
String叫: 类构造器

3.Boolean类:

let flag = new Boolean(true); 

4.Object类:

 let obj = new Object(); 

5.Array类:

 // 通过字面量的形式创建数组
  let arr1 = [1,2,3]
   console.log(arr1) 

// 通过new Array的形式创建数组
 let arr2 = new Array("a","b","c")
  console.log(arr2) 

6.Date类:

Date是日期的意思 Data是数据的意思

  // Date是类 构造器 d是日期对象 l
  let d = new Date(); 
  console.log(d)

三、一切都是对象

所有数据都是对象:

  • (1)所有的html元素都是对象
  • (2)数组也是对象
  • (3)函数也是对象
  • (4)基本数据类型也可以是对象
  • (5)window也是对象 GO
  • (6)consolo也是对象
  • (7){} 也是对象

1.所有的html元素都是对象

// lis是两个li 是一个数组(伪数组) 
let lis = document.getElementsByTagName("li");
 // lis[0] 是一个对象 对象是类创建的 
 console.dir(lis[0]); 
 // 如果是对象,使用dir打印,可以看到对象中的属性 
 // HTMLLIElement 是类 也叫构造器
  console.log(lis[0] instanceof HTMLLIElement)

2. 数组也是对象:

   let arr1 = ["a","b","c"] 
    let arr2 = new Array("d","e","f"); // arr2肯定是对象 
    // 对象是属性的无序集合 
    console.dir(arr1) 
    console.dir(arr1.length) 
    console.dir(arr1.push()) 
    console.dir(arr1.pop()) 
    console.log(arr1 instanceof Array) 

3.函数也是对象:

 function fn() { 
 	console.log("fn...")
 	 }
 console.dir(fn) 
 fn.call() fn.bind() 
 // fn是对象 实例 Function是类 构造器 
 console.log(fn instanceof Function) 

4.基本数据类型也可以是对象:

 let str = "hello"; 
 str.toUpperCase()  //str会瞬间包装成一个对象 
 str.length  //str会瞬间包装成一个对象 
 let num = 110; 
 num.toFixed(2)  //num会瞬间包装成一个对象

四、对象是属性的无序集合

对象是属性的无序集合:
操作集合中的属性,说到操作,就是指"增删改查"。

1.查:

如何访问对象中的属性。在JS中提供了两种方式,可以访问对象中的方式
1)打点调用 .属性访问运算符 非常常用
2)通过[]调用 目前来说,先了解
当访问一个对象上不存在的属性,得到的undefiend

遍历对象:把对象中每一个属性都获取到 for in来遍历对象
遍历数组:

    let arr = ["a","b","c"]
    // 1)使用for循环就可以遍历数组
    for(let i=0; i<arr.length; i++){ // 命令式编程
      console.log(arr[i])
   }
    // 2)使用forEach遍历数组
    arr.forEach(item=>{
      console.log(item)
   })
    // 3)使用for in遍历数组
    for (let key in arr) {
      // 此处的key是索引 下标
      console.log(arr[key])
   }

2.增:

给对象中增加一个属性
通过 obj.xxx = “xxx”

3.改:

所谓的修改,就是添加一个同名的属性,后面添加的同名属性,会把前面的覆盖掉

4.删:

delete运算符 是一个运算符 typeof in new instancefo delete

  let obj = {
    name:"wangcai",
    age:100
 }
  delete obj.age; // 删除obj中的age属性
  console.log(obj.age); // 相当于访问一个对象上不存在的属性 结果是und

五、公有属性和私有属性

let obj = {
  name:"wangcai", // 私有属性
  age:100 // 私有属性
}

每个对象上面都是一个属性叫__proto__,它指向一个对象,这个对象叫原型对象:
这个东西,叫隐式原型对象,简称为原型对象。

属性分类:
1)公有属性 对于obj来说,公有属性是指__proto__里面的属性
2)私有属性 指name和age

hasOwnProperty(): 判断一个属性是否是一个对象的私有属性
公有属性和私有属性,也必须指定出是相对于谁来说的。

delete运算符,只能删除私有属性,不能删除公有属性。

如果说私有属性和公有属性同名:
调用时,调用的是自己的私有属性。 在一个对象中找一个属性,先在自己的私有属性中找,找不到,才
会去公有属性中找

  let arr = ["a","b","c"];
  // arr.push("d"); // push是公有属性
  arr.push = function () {  // 这样添加的属性都是私有属性
    console.log("此push是一个arr的私有属性")
 }
  arr.push("d"); // 此处调用的push就是自己的push
  console.log(arr)

in:
也是一个运算符 判断一个属性是否属于某个对象 不管是公有属性还是私有属性

六、对象是由类(函数)创建的

函数有多个角色:
我把函数分成4个角色 函数在JS中的是一等公民
学习JS 函数是核心

角色一:把函数当做一个普通的函数

  // 把函数当作是一个普通的函数
  function fn() {  // 函数声明
    console.log("fn...")
 }
  fn(); // 函数调用

角色二:函数出现在对象中,是一个方法

    let obj = {
      name:"wangcai",
      age:100,
      //下面的函数是一个方法
      say:function () {  // 一个函数出现在对象中, 我们叫它为方法
        console.log("say...")
     }
   }
    obj.say();

角色三:函数也是一个对象

    function fn() {
      console.log("fn...")
   }
    // fn也可以是一个对象 对象是属性的无序集合
    fn.a = 1;  // 给对象上添加私有属性 a
    fn.b = 2; // 给对象上添加私有属性 b
    fn.c = 3; // 给对象上添加私有属性 c
    console.dir(fn)

角色四:函数也可以是一个类

如果你把函数当成一个类,通常函数名(类名)要大写。 是推荐大写。

 // Person是类
  function Person(name) {
    this.name = name;  // 给对象设置一个私有属性
 }
  // 只要是对象,必定有一个属性叫__proto__
  let p1 = new Person("wangcai"); // p1是对象 对象是属性的无序集合
  console.dir(p1)

new:
new本意是新的意思,在计算机中,new就是用来创建对象。 只要加new,最终的结果肯定是对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值