对象本质

对象

对象是拥有属性和方法的程序,是数据与行为的组合,是对客观世界的抽象实现

  1. 对象是对类模版的具体实现
  2. 对象能够实现客观世界的抽象集合
  3. 动态对象拥有自动装箱机值调用可能会产生内存泄漏
  4. 对象原型为对象提供了继承和共享属性的机制,从而减少内存占用

初始对象

  • 由于new只执行一次,和new相关联的构造函数也只执行一次(便于初始化属性)
  • new本质是创建已经调用过构造方法的对象,或创建调用类对象构造方法的对象
  • new构造函数的调用会创建新的对象。新对象会继承构造函数的属性和方法以及类的原型

new + 类名 new自动关联类的构造器
new + 构造方法 new自动关联指定的构造器(本质)

信息对象

以消息形式存放成员, 对象的实质是指向消息的引用

DOM对象

document(存在于浏览器):DOM为HTML文档对象,对象的实质是指向DOM的引用

数组对象

以数组形式存放成员, 对象的实质是指向数组的引用

数组对象的作用是:使用单独的变量名来存储一系列的值

  1. Python列表
  2. JavaScript

矩阵对象

以行列的形式来组织数据元素的数组对象,对象的实质是指向特殊数组的引用

方阵:轴数和列数相等的实例对象
行列式: 方阵对象的成员属性

哈希对象

以哈希形式存放成员,对象的实质是指向匿名哈希的引用

键值对:存放类对象成员的容器(name="username" value="nagisb")

  1. Javascript
  2. Perl
  3. Ruby
  4. JSON
  5. 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>
posted @ 2024-12-13 03:21  NAGISB  阅读(10)  评论(0编辑  收藏  举报