发表于: 2019-12-03 17:42:36

1 909


今天完成的事情: 

1 整理js原型资料

明天计划的事情:

整理js原型链资料,调试接口

遇到的问题:

1 暂无

收获:

函数原型对象
函数原型:函数创建时浏览器都会在内存中创建一个对象,函数prototype属性值是函数的原型对象,对象属性constructor值是这个函数。原型对象默认只有属性constructor,其他都是从Object继承而来,暂且不用考虑
改函数原型/添加属性:函数.prototype = ;/ 函数.prototype.属性 = ;  对象可用_proto_更改
注意改变后的原型对象,他constructor指向并不会更改,可用上更改属性方法,更改原型对象constructor值
构造函数创建对象原型:用new创建的对象(函数函数内带return则不一样,具体看构造函数),默认不可见属性[[prototype]],指向了构造函数的原型对象, 该属性无法直接访问到

与原型有关的几个属性和方法
prototype 属性:存在于函数对象中,指向该构造函数的原型对象
[[prototype]] 属性:存在于对象中,指向该对象的原型对象,默认不可见(在chrome/火狐可用_proto_访问该属性)
开发者尽量不用这种方式访问,因为操作不慎会改变这个对象的继承原型链

constructor 属性:属性存在于原型对象中,他指向了构造函数。实例属性constructor指向构造函数

instanceof 操作符:详情该运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链

.hasOwnProperty():查询属性来自本身(true)的还是原型链中,原型链中或不存在都会返回false。详情看对象笔记

in 操作符:判断属性是否存在于这个对象中(先对象本身中找,找不到再去原型中找),返回布尔值


原型模型和构造函数模型创建对象

原型模型创建对象的缺陷
缺陷:原型中所有的属性都共享,用同一个构造函数创建的对象去访问原型中属性时,大家都是访问的同一个对象,如果一个对象对原型的属性进行了修改,则会反映到所有的对象上面
好处:但这特性对方法(属性值是函数的属性)非常合适
构造函数模型创建对象的缺陷
在构造函数中添加属性和方法,每个对象都有自己独有的一份,大家不共享。这个特性对属性比较合适,对方法不合适,因为对所有对象来说,他们的方法应该是一份就够了,没有必要每人一份,造成内存的浪费和性能的低下

动态原型模式创建对象
上面的组合模式,并不完美。因为把构造方法和原型分开写,所以就有了动态模型创建对象
动态原型模式:动态原型模式把所有的属性和方法都封装在构造方法中,而仅仅在需要的时候才去在构造方法中初始化原型,又保持了同时使用构造函数和原型的优点

返回列表 返回列表
评论

    分享到