从入门到精通:掌握JS中的对象与包装类

458 阅读4分钟

什么是对象?

在JS中万物皆对象,包含你看到的字符串和数字。 那么他们在哪种场景能被作为对象呢?

### 请看下文

我们先来看一段代码

var MrXu ={
    name :'XUyu' ,
    age :  18,
    sex:'boy',
    run:function(){
    console.log('i am running');
  
    },
  }  

我们在这段代码中声明了一个叫作MrXu的对象,在对象当中我们放入键值对。如 name :'XUyu' ,,name为键名,'XUyu'为键值。在这段代码中我们可以发现键值可以为字符串,数字或是函数体

如何对对象进行增删改查?

  1. 增加属性: 通过直接赋值或使用变量动态添加属性,例如:

    // 直接赋值
    MrXu.girlFriend = '章若楠';
    
    // 或者使用变量动态添加属性
    var abc = 'girlFriend';
    MrXu[abc] = '章若楠';
    
  2. 修改属性: 直接修改对象的属性值,例如:

    MrXu.age = 20;
    
  3. 查找属性: 使用对象的属性名来获取相应的属性值,例如:

    console.log(MrXu.health); // 输出健康值
    
  4. 删除属性: 使用 delete 关键字来删除对象的属性,例如:

    delete MrXu.sex; // 删除性别属性
    

访问对象上不存在的属性,得到undefined,而不是报错。这些操作增强了代码的灵活性和可扩展性

创建对象

  • 1.创建对象字面量:var obj {}
  • 2.调用系统自带的构造函数: var obj = new Object()
  • 3.调用自定义的构造函数

我们定义一个名为 Car 的函数,然后创建一个名为 car 的对象实例。

function Car(){
    this.name = 'su7'
    this.height = '1400'
    this.lang = '5000'
    this.weight = 10000    
}
    let car = new Car()
 console.log(car);
  1. function Car():这是一个构造函数的定义,构造函数用于创建对象。在这个构造函数中,它并没有显式返回值,而是初始化了一些属性。

  2. 在构造函数内部,定义了四个属性:

    • name:赋值为字符串 'su7',表示车辆的名称。
    • height:赋值为字符串 '1400',表示车辆的高度。
    • lang:赋值为字符串 '5000',可能是指车辆的长度(但应该是拼写错误,应该是length)。
    • weight:赋值为数字 10000,表示车辆的重量。
  3. let car = new Car():使用 new 关键字创建了一个新的 Car 对象实例,并将其赋值给变量 car

构造函数的特殊场景(工厂模式)

当我们批量化生产对象时,我们在声明函数的内部传入一个形参,如color,然后我们在new car 中传入一个实参打印出来的car就会有颜色属性 `

function Car(color){
    this.name = 'su7'
    this.height = '1400'
    this.lang = '5000'
    this.weight = 10000 
    this.color = color
}
    let car1 = new Car('red')
    let car2 = new Car('blue')
    
 console.log(car1,car2);

我们可以看见分别打印出了两辆不同颜色的car,car本身的参数依然一样 image.png

构造函数被new的过程

1.我们使用构造函数People创建了一个新的对象实例p1

  1. 在构造函数中,将传入的参数值赋给了该实例对象的属性。

  2. 最后,输出了p1对象的内容,包括姓名、年龄和性别。

// 构造函数
function People(name,age,sex) {
    
    this.name = name
    this.age = age
    this.sex = sex
}
let p1 = new People('longlong',18,'boy')

// 构造函数被new时的过程

console.log(p1);

1.new会在构造函数中创建一个 this 对象

2.执行函数的逻辑代码 (相当于往this对象上添加属性)

3.return this 对象

包装类

1.原始值是不能拥有属性和方法的,属性和方法是对象独有的

    var num = '123'
    num.abc = 'hello'
    console.log(num.abc);

我们会发现打印出来undefined

image.png

var num = new Number(123)
num.abc = 'hello'
console.log(num.abc);
console.log(num * 2);

包装类 -- 这个隐式的过程,创建字面量的时候会发生包装类,V8会直接将数字类型转换成字符串来用,到第二行,V8发现你想要的是数字类型,所以矛盾了,执行delete操作删除字符串,导致最终打印undefined。

var num = new Number(123)
num.abc = 'hello'
console.log(num.abc);
console.log(num * 2);

对于这种自己构造的函数,直接就显示是字符串类型,不需要进行delete操作,第一个打印字符串hello,第二个转换回数字打印246。

总结

在这篇文章中我们介绍了对象以及在对象中的一些操作,通过学习对象与包装类可以让我们处理基本数据类型的更加便捷。希望大家阅读本文后能有所收获!