对象本质
对象
对象是拥有属性和方法的程序,是数据与行为的组合,是对客观世界的抽象实现
- 对象是对类模版的具体实现
- 对象能够实现客观世界的抽象集合
- 动态对象拥有自动装箱机值调用可能会产生内存泄漏
- 对象原型为对象提供了继承和共享属性的机制,从而减少内存占用
初始对象
- 由于new只执行一次,和new相关联的构造函数也只执行一次(便于初始化属性)
- new本质是创建已经调用过构造方法的对象,或创建调用类对象构造方法的对象
- new构造函数的调用会创建新的对象。新对象会继承构造函数的属性和方法以及类的原型
new + 类名 new自动关联类的构造器
new + 构造方法 new自动关联指定的构造器(本质)
信息对象
以消息形式存放成员, 对象的实质是指向消息的引用
DOM对象
document(存在于浏览器):DOM为HTML文档对象,对象的实质是指向DOM的引用
数组对象
以数组形式存放成员, 对象的实质是指向数组的引用
数组对象的作用是:使用单独的变量名来存储一系列的值
- 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
?>
自定义对象
以自定义形式存放成员, 对象的实质是指向自定义的引用
自定义的作用域被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>