Open palmerye opened 5 years ago
JavaScript
基于对象?面向对象?《面向对象分析与设计》Grady Booch这么解释“对象”:
这么解释,是不是就应了那句话:万物皆对象?
对象有以下三个特征:
JavaScript
怎么描述对象?
C++
、Java
等编程语言,使用“类”的方式来描述对象;而JavaScript
选用了“原型”,这有历史原因,咱不追究了,我们重点来看JavaScript
中用什么方式描述对象的三个特征。
对象的唯一性一般是用内存地址来体现的,JavaScript
中也不例外,对象具有唯一内存地址,才使得有唯一标识性。
不同语言会使用不同的术语来抽象描述它们,比如 C++ 中称它们为“成员变量”和“成员函数”,Java 中则称它们为“属性”和“方法”。
在 JavaScript
中,将状态和行为统一抽象为“属性”。JavaScript
对象具有高度的动态性,它赋予了使用者在运行时为对象添改状态和行为的能力。
JavaScript
对象的两类属性:数据属性、访问器属性(getter/setter)
value
:属性的值writable
:决定属性能否被赋值enumerable
:决定 for in
能否枚举该属性configurable
:决定该属性能否被删除或者改变特征值getter
:函数或 undefined
,在取属性值时被调用setter
:函数或 undefined
,在设置属性值时被调用enumerable
:决定 for in
能否枚举该属性configurable
:决定该属性能否被删除或者改变特征值查看属性的特征描述:
Object.getOwnPropertyDescriptor(obj, "key")
修改属性的特征:
Object.defineProperty(obj, "key", {value: 2, writable: false, enumerable: false, configurable: true})
我们可以看到,实际上 JavaScript
对象的运行时是一个“属性的集合”,属性以字符串或者 Symbol 为 key,以数据属性特征值或者访问器属性特征值为 value。对象是一个属性的索引结构。
以上看起来,JavaScript
是基于对象的。那又是面向对象么?
apache
、node.js
、nginx
、tomcat
之间有什么区别?Nginx
和Apache
是纯web服务器,不具备解析动态语言的能力。Nginx
一般用来做端口转发代理。Nodejs
是JavaScript的运行态环境,有解析js脚本语言的能力,也有http server
的能力。tomcat
是java servlet
的开源实现,属于application server
,当然也有http server
的能力。【知乎:apache、node.js、nginx、tomcat谁能帮我捋一捋关系?】