深入理解JS中的对象和包装类:从基础到应用
前言
对象
对象是面向对象编程中的核心概念之一,它是程序中的实体,具有状态(属性)和行为(方法)。对象可以是现实世界中的实际物体,也可以是程序中的抽象概念。在面向对象编程中,对象是类的实例。类是对象的模板,描述了对象应该具有的属性和行为。当我们创建一个类的实例时,就生成了一个对象,这个对象具有类定义的属性和行为。
包装类
包装类是一种用于将基本数据类型转换为对象的类,在Java中提供了对应于每种基本数据类型的包装类。这些包装类提供了一些额外的功能,比如将基本数据类型转换为对象、在集合类中使用基本数据类型等。
介绍
对象的定义
定义一个对象ltt
var ltt = {
name: 'lenora',
age: 18,
sex: 'girl',
run: function() {
console.log('I am running!');
this.health--;
},
drink: function() {
console.log('I am drinking coconut~');
this.health++;
},
health: 100
}
对对象进行增删改查(执行后面的代码时注释下面的代码)
//增
ltt.boyFriend = 'lxp';
//修改
ltt.age = 2;
//查
console.log(ltt.health);
//删除
delete ltt.sex
现在我们为ltt增加一个属性为boyFriend,值为lxp的键值对,并输出ltt
var a = 'boyFriend';
ltt[a] = 'lxp';//注意ltt.a是无法得到想要的结果的 ltt.a ==> ltt['a']
console.log(ltt);
注意:访问对象上不存在的属性,得到undefined,而不是报错。
创建对象的方式
创建对象字面量
var obj = {} //创建对象字面量/对象直接量
调用系统自带的构造函数 new Object()
// Object() 构造函数 String() Number() Boolean()
var obj2 = new Object();
obj2.a = 'hahahhaha'
console.log(obj2);
调用自定义的构造函数
function Car(color) {
this.name = 'su7';
this.height = '1400';
this.lang = '5000';
this.weight = 1000;
this.color = color;
}
let myCar = new Car('black');
console.log(myCar);
实例一
//构造函数
People.prototype.a = 1;
function People(name, age ,sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
let p1 = new People('ltt', 18, 'female');//实例对象
console.log(p1);
console.log(p1.a);
分析 构造函数被new时的过程的执行步骤:
- var this = {};==>创建this对象
- 往this对象添加属性
- this.proto=People.prototype;
- return this;==>返回this对象
构造函数 new 的过程
- new 会在构造函数中创建一个 this 对象
- 执行函数中的逻辑代码 (相当于往this对象上添加属性)
- this.proto=xxx.prototype;
- return this 对象
包装类
实例一
//包装类
//原始值是不能拥有属性和方法的。属性和方法是对象独有的
var num = 123;// ==> num = new Number(123) ==> num为一个对象
num.abc = 'hehe'
console.log(num.abc);
分析 该代码的执行过程实际上是下面的代码,会形成一个包装类,定义num时会调用系统自带的构造函数Number()来创建一个对象num,并为该对象添加属性abc,但是执行完后v8引擎发现代码的本意不是这样的,就删除了num对象中的abc属性,所以输出undefined。
//包装类 --- 这个隐式的过程
new Number(123).abc = 'hehe';
delete new Number(123).abc;
console.log(num.abc);
实例二
var num = new Number(123);
num.abc = 'haha';
console.log(num.abc);
console.log(num * 2);//当参与运算时,变为原始类型
分析 当对象num参与运算时,会变为原始类型number,所以输出246。
实例三
var str = 'abcd'; // ==>str = new String('abcd') ==> str为一个对象
console.log(str.length);//内置属性
分析 length为str对象的内置属性。
实例四
var arr = [1, 2, 3, 4, 5]
arr.length = 2;
console.log(arr);
var str = 'abcde';
str.length = 2;
console.log(str.length);
分析 数组arr可以通过改变length来改变数组,但是字符串str不可以,是因为str会形成一个包装类。
//包装类
new String('abcde').length = 2;
delete new String('abcde').length;
new String('abcde').length;
结语
看完有没有对对象和包装类多了一些了解呢~如果有收获的话记得给小编一键三连哦·
转载自:https://juejin.cn/post/7365811000475680778