对象本质
对象
对象是拥有属性和方法的程序,是数据与行为的组合,是对客观世界的抽象实现
- 对象是对类模版的具体实现
- 对象能够实现客观世界的抽象集合
- 对象原型为对象提供了继承和共享属性的机制,从而减少内存占用
- 动态对象拥有自动装箱到(包装类)自动拆箱到基本类型,调用可能会产生内存泄漏
- 对象之间相互独立封装作用域不同,类对象相当于所有实例的共享开发厂全局共享作用域
- 对象占用栈内存,某些数据类型的包装与拆包是为了避免内存中过多对象导致性能开销大
- 对象的成员重写可共同向上作为单个抽象类的抽象实现,共同向下可作为多个接口的具体实现
初始对象
- 构造器没有void返回/类名作为构造器的部分,多定义重载->多形属性成员
- 由于new只执行一次,和new相关联的构造函数也只执行一次(便于初始化属性)
- new本质是创建已经调用过构造方法的对象,或创建调用类对象构造方法的对象
- new构造函数的调用会创建新的对象。新对象会继承构造函数的属性和方法以及类的原型
- new Sting("nagisb") 当类型可以通过new构造传递成员属性说明该类型拥有自动装箱机制
- 类继承当中派生类默认不继承基类的构造器,即显式
super
或隐式参数列表
的重载构造器 - 类重写当中默认不继承基类的方法,即显式
@Override
或隐式参数列表
的重写方法
new + 类名 new自动关联类的构造器
new + 构造方法 new自动关联指定的构造器(本质)
信息对象
以消息形式存放成员, 对象的实质是指向消息的引用
DOM对象
document(存在于浏览器):DOM为HTML文档对象,对象的实质是指向DOM的引用
数组对象
以数组形式存放成员, 对象的实质是指向数组的引用
数组对象的作用是:使用单独的变量名来存储一系列的值
- C/C++
- Python列表
- JavaScript
矩阵对象
以行列的形式来组织数据元素的数组对象,对象的实质是指向特殊数组的引用
方阵:轴数和列数相等的实例对象
行列式: 方阵对象的成员属性
指针对象
以地址的形式来组织存储成员,对象的实质是指向地址操纵的引用
数组名:指针首元素线性地址偏移的实例对象
字符串:字符数组的成员属性
哈希对象
以哈希形式存放成员,对象的实质是指向匿名哈希的引用
键值对:存放类对象成员的容器(name="username" value="nagisb")
- Javascript
- Perl
- Ruby
- JSON
- Python字典
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DOM对象JS对象</title>
</head>
<body>
<p id="demo"></p>
<script>
let person= { //JS对象(可变:唯个对象不同引用)
firstName: "nagisb",
lastName: "nagisb2",
age: 18,
eyeColor: "blue",
fullName: function() {
return this.firstName +"现在" +this["age"] +"岁数"; //传入对象本身, this作为对象本身应对不同引用
}
};
x = person; //哈希对象复用性差,x仅仅作为对象的不同引用
document.getElementById("demo").innerHTML= x.fullName();
</script>
</body>
</html>
构造对象
以构造函数形式存放成员, 对象的实质是指向构造函数的引用
函数指针:存放对象的容器(this.func)(new使this绑定为对象)(非函数对象)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>构造对象</title>
</head>
<body>
<script>
function person(firstname,lastname,age,eyecolor){
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName; //作为存储函数传递给对象方法
function changeName(name){ //this隐式绑定
this.lastname=name; //约定的定义形式
}
this.func = () => { //this显式绑定
alert(this.firstname);
}
}
myMother=new person("Sally","Rally",48,"green"); //实例对象
myMother.changeName("Doe");
document.write(myMother.lastname);
myMother.func();
</script>
</body>
</html>
表单对象
以键值对形式存放成员, 对象的实质是指向键值对的引用
以键值对形式存放元素, 关联数组的实质是指向键值对的引用在html标签类中,表单对象:username就是类的实例,而nagisb属于实例对象属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表单控制</title>
</head>
<body>
<form name="myform" method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
x=document.forms["myform"]["username"]; //表单对象1
p=document.forms["myform"]["password"]; //表单对象2
x.value; p.value; //根据方法引用对象属性
<?php
$x=$_POST["username"]; #关联数组1
$p=$_POST["password"]; #关联数组2
?>
枚举对象
以内部变量形式存放成员, 对象的实质是内部变量的引用
由于变量作为对象的形式,既有对象的受检异常(安全性),又有变量的灵活调用(枚举变量)
public class Src {
public static void main(String[] args) {
enum Weekday {
//被引用后自动new为枚举对象/枚举变量
MONDAY,TUERDAY,WEDNESDAY,THURSDAY,FRIDAY,SATUDAY,SUNDAY;
}
Day today = Day.Monday; //枚举实例作为枚举变量
switch(today) {
case Monday:
System.out.println("Hello Monday");
}
}
}
自定义对象
以自定义形式存放成员, 对象的实质是指向自定义的引用
自定义的作用域被var限定不会作为 window全局对象自定义定义在全局作用域中的变量和函数都会变成 window 自定义对象的属性和方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Window自定义对象</title>
</head>
<body>
<script>
var x = this; //指向全局变量对象,其中x非全局变量对象,仅仅作为全局变量对象的引用
window.carName={name:"nagisb"}; //自定义全局变量对象(对象)
carName2="helloworld"; //自定义全局变量对象(字符串)
function func() {return "hellofunc"}; //自定义全局变量对象(函数)
document.write(x); //在浏览器中,this默认指向Window对象
document.write(x.carName["name"]); //访问对象形式1
document.write(x.carName.name); //访问对象形式2
document.write(x.carName2); //访问字符串形式
document.write(x.func()); //访问函数形式
</script>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义