js原型初窥-伪类模式

来源:互联网 发布:手机淘宝私人定制 编辑:程序博客网 时间:2024/06/10 01:07

  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);//trueconsole.log(p1.__proto__ === p2.__proto__);//flase</script>

1.构造函数的实例在创建时,不是引用。而是完完全全的复制了一遍。

这是我根据上述代码手绘的一张图



Preson构造函数就是自定义构造器,new 出来的实例1,其实和实例 根本不是一种引用关系,可以理解为照着自定义构造器
的模子copy的一份 互不干扰的实例。 当我们修改Preson的prototype其实实例1根本不受任何影响,当我们把实例对象原型的构造
也修改为Preson本身,实例1还是不受任何影响,虽然实例1可以通过constructor找到已经被修改的原型。但是实例1的原型早在被
new出来的时候就已经确定了。 实例2的出现 又是独立的一份。 足以说明JavaScript 的类 继承都是通过对象模拟出来的。所以构造函数就是一个伪类

我会在近2天 总结继承,也会画出底层原型关系图,喜欢的点个关注。