
JS核心面向对象的内存分配
1. Java数据的内存分配
Java中的所有对象都有其唯一的属性值,但是所有对象共享其类中方法的入口地址,因为同一类的所有对象都应具有相同的功能. 创建第一个对象时,方法的类的方法的入口地址分配在内存的数据段区域中,并保留在该区域中,直到程序退出(虚拟机停止). 内存数据段区域中数据的生命周期是从程序启动(虚拟机启动)到程序停止(直到虚拟机停止),由Java虚拟机提供的线程调度程序将启动相关线程,线程将把数据段和内存堆区域的相关数据提交给处理器,以通过内存堆栈区域(临时存储区域)进行处理. 处理完数据后,线程将把CPU资源和处理结果返回到堆栈,并将堆栈中的临时数据释放到堆区域或数据段区域(将数据返回到原始位置). 在这里,内存堆区域数据的生命周期是从创建对象(通过构造函数创建对象)到销毁对象(使用虚拟机销毁对象以回收内存). 堆栈区域数据的生命周期是从局部变量调用的开始到局部变量调用的结束. 通常,局部变量分配在内存的堆栈区域中,实例成员变量和所有对象都分配在内存的堆区域中(实例成员变量实际上是对象的属性,因此它们分配在堆中区域)和静态变量(全局变量)分配在堆区域中. 内存的数据段区域(实际上是数据段中的静态区域),因此成员方法分配在内存的数据段区域中(静态方法分配在数据的静态区域中段)
2. JavaScript数据的内存分配
为了匹配Java成员数据的内存分配,JavaScript中对象的成员数据需要进行自己的特殊处理. 首先,JavaScript中的函数是一个对象,其函数名称直接包含对函数对象地址空间的引用. 其次,JavaScript中没有类的概念. Java类的成员出现在JavaScript函数对象中,并且可以动态生成这些成员数据. JavaScript中的函数具有以下属性:

A. 您可以调用一个纯函数,例如函数test(){} test(). 调用函数意味着执行函数主体的内容.
B. 在构造函数的前面,可以使用new调用来创建对象,例如: new test()与Java的不同之处在于,测试函数主体可以包含return语句以返回相关的数据类型. 当然,如果没有return语句,它将是Return这个函数对象的实例. 显然,此功能对象是实例对象的原型,但是子对象具有与其原型相同的成员数据. Java构造函数无效,并且不返回任何数据类型.
C. 在存在对象引用的情况下进行操作,例如: varvariable = testJava类本身定义了对象之间的方法共享,JavaScript函数对象则不这样做,因为Java中的对象必须通过构造函数传递. 它只能在对象之后使用生成. JavaScript中的函数是一个对象,可以在没有构造函数的情况下使用. 也就是说,如果功能对象没有与其他功能对象相同的原型,则无法解释当前的功能对象,并且其他功能对象共享成员函数地址,而Java类充当JavaScript中的原型,因此所有必须生成的对象共享其方法的入口地址. 反过来,JavaScript使用模仿的继承机制将原型与原型统一. 多个继承的函数对象的成员函数的入口地址. 当然,Java中子类继承的父类的方法也是相同的入口地址. 当子类继承父类时,它将完成子类唯一成员地址的扩展,而Java类是Java对象的模板. 说到Java对象对Java类的继承,实际上,Java类模板生成的对象在其中具有一层继承,但是它们并不完全等同于纯继承关系,因为不能使用该类中的实例成员. 直接地,引入JavaScript原型的概念来创建对象正则化和模拟Java继承以实现代码重用. JavaScript中的继承是对纯Java继承和类生成的对象的全面模拟. 用JavaScript创建函数对象的标准格式如下:
功能功能对象名称(参数列表){
这个. 成员变量1;?

这个. 成员变量2;
........
函数对象名称. 原型. 成员函数名称1 = function(){成员函数主体};
函数对象名称. 原型. 成员函数名称2 = function(){成员函数主体};
........

}
参数列表中的项目用逗号分隔. 请注意,在成员函数定义之后应使用分号表示成员函数定义的结尾. 在定义成员函数时使用: 函数对象名.prototype. 成员函数名== undefined,以确定原型是否已存在此成员函数,如果不存在,则再次定义它. 这必须在成员变量和成员函数之前添加
或函数对象name.prototype,否则实例化的对象在调用成员时将返回undefined,并且在实例化对象之前直接使用函数对象名调用成员将返回undefined. 在实例化功能对象之前,功能对象就像Java中的类一样,不能直接调用实例变量.
二,Json(JavaScript对象表示法)
Json是使用JavaScript创建对象的独特方法. 语法格式如下:

var object name = {key: value,key: value,...}大括号是键值映射表,键和值之间用冒号分隔,而键值对之间用冒号分隔逗号,当然值也可以是成员函数,例如:
var variable = {
名称: “ liyongfu”,
年龄: 28岁
研究: function(){成员函数体}
}
您不能将此对象和函数对象name.prototype添加到Json创建的成员中. 如果添加它们,将报告运行时错误. 由于Json创建的成员是全局成员,因此必须直接通过函数对象名称来调用它们,并且不能使用new. 以相同的方式创建对象,否则将报告运行时错误. 与上述不同,Json创建的对象可以通过函数对象名称直接调用其成员,就像Java中的类可以直接调用其全局静态成员一样.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-299409-1.html
即使不与我们结盟
战争其实离我们不远
既然美国不承认十二海里只承认三海里拍几艘核潜艇到美国三海里以外溜达溜达看看美国什么反应