Java语言是面向对象的,而JavaScript语言是基于对象的。两者之间是有差异的。这里主要以这两种语言进行一个对比。
1.封装 (数据结构 + 算法)
Java语言可通过访问修饰符来保证封装性:private。
该类的实例状态应该只能由该类的方法访问修改,否则我们说该类的封装性遭到了破坏。封装性保证了安全和可维护。
JavaScript语言不支持访问权限修饰符,无法隐藏具体实现。
JavaScript语言是动态成员, Java语言静态成员。
JS中只有实方法(含有隐式形参this)。没有静态方法。
JS没有函数重载,形参只是用于便利存取实参。
2.继承
3.多态
我们知道Java语言中有接口类和抽象类,存在接口类和抽象类的继承。而JavaScript语言中无接口类和抽象类。
JavaScript堆中只有对象一种数据结构(一般是哈希表结构),而Java堆中有实例和类两种数据结构。所以,JavaScript是一切皆为对象。
逻辑内存模型由执行模型和对象模型组成。
JavaScript的逻辑内存模型是比较复杂的。
执行模型
可执行的JavaScript代码分三种类型:
在一个页面中,第一次载入JS代码时创建一个全局执行环境,当调用一个 JavaScript 函数时,该函数就会进入相应的执行环境。如果又调用了另外一个函数(或者递归地调用同一个函数),则又会创建一个新的执行环境,并且在函数调用期间执行过程都处于该环境中。当调用的函数返回后,执行过程会返回原始执行环境。因而,运行中的 JavaScript 代码就构成了一个执行环境栈。执行模型就是对JS代码执行环境的一个描述
对象模型
JS中一切皆对象,对象模型就是对代码中对象以及对象之间关系的一种抽象描述
对象中的[[]]属性是内置的隐式属性,有JS引擎添加
var test = function functionName(a){document.write(a + "<br />");}
var fn = new Function("形式参数1","形式参数2",...,"形式参数n","函数体");
var fn = Function("形式参数1","形式参数2",...,"形式参数n","函数体");
我们和Java的对比一下:
中括号内放置的是引擎给加的隐式属性,必包括3个(Prototype指针,Class字符串/类名,Extensible/属性是否可增删),只包括这三个隐式属性的是对象
与全局执行环境对象关联的变量对象(Variable Object)在JS中称为全局对象(Global Object),JS规定其一定是一个宿主对象,在Web中,为window对象。我们编写的JS代码可以访问window对象。全局执行环境直到应用程序退出—例如关闭网页或浏览器—时才会被销毁。相当于Java的常量池。
与全局执行环境对象关联的变量对象(Variable Object)在JS中称为全局对象(Global Object),JS规定其一定是一个宿主对象,在Web中,为window对象。我们编写的JS代码可以访问window对象。全局执行环境直到应用程序退出—例如关闭网页或浏览器—时才会被销毁。相当于Java的常量池
相当于Java中的Object类。有两个对象结构组成。
原型对象中的方法和属性都是可以被继承的 类对象中放置的都是静态属性,可以直接通过类调用 可以根据constructor属性区分类对象与原型对象:原型对象有constructor属性,没有prototype属性,类对象则相反
相当于Java中的Class反射类。有两个对象结构组成。
JS中一切皆对象,所以Function也是Object的实例,Function.prototype指向Object的原型
继承的实质是指JS对象的原型指向其父类
JS的原型对象+类对象相当于java的类
Thanks for 【进阶er】’ help
本文地址:https://blog.csdn.net/qq_42322103/article/details/105626889
如对本文有疑问, 点击进行留言回复!!
Parallels Desktop v15.1.4-47270 商业版下载 Mac安装Windows首选虚拟机
关于LPC824Lite开发板下载程序时提示"Invalid ROM Table"
MySQL 5.7 关于 JSON 类型的子集Key/Value获取方法分享
javascript从入门到跑路-----小文的js学习笔记(19)------- js的垃圾回收机制
网友评论