JavaScript中是没有类的
一.JavaScript 语言本身是没有类的,js类是通过对象模拟的。
二.JavaScript 的对象和构造类没有关系
JavaScript 构造函数就是一个伪类模式
在java 中构造函数改变 实例对象也会改变,《java编制思想》中上溯造型、继承 等原理 严格明确了 类与对象的引用关系
然而在JavaScript 中存在的只有对象引用,却没有真实的类。虽然 js都可以模拟出来继承、封装 等原理。
JavaScript 构造函数为什么是一个伪类?
<script type="text/javascript">
function Preson(){}
var p1 = new Preson();
Preson.prototype = {name : 'liu'}//修改Preson实例对象的原型对象
Preson.prototype.constructor = Preson;//把实例对象的原型对象构造指向自己
var p2 = new Preson();
console.log(p1.constructor === p2.constructor);//true
console.log(p1.__proto__ === p2.__proto__);//flase
</script>
1.构造函数的实例在创建时,不是引用。而是完完全全的复制了一遍。
这是我根据上述代码手绘的一张图
Preson构造函数就是自定义构造器,new 出来的实例1,其实和实例 根本不是一种引用关系,可以理解为照着自定义构造器
的模子copy的一份 互不干扰的实例。 当我们修改Preson的prototype其实实例1根本不受任何影响,当我们把实例对象原型的构造
也修改为Preson本身,实例1还是不受任何影响,虽然实例1可以通过constructor找到已经被修改的原型。但是实例1的原型早在被
new出来的时候就已经确定了。 实例2的出现 又是独立的一份。 足以说明JavaScript 的类 继承都是通过对象模拟出来的。所以构造函数就是一个伪类
我会在近2天 总结继承,也会画出底层原型关系图,喜欢的点个关注。