01 从传统构造函数到构造函数

1、对象中数据的重复

 

 

从上图示例可以看出

重复执行的代码容易出现重复的对象,最典型的就是 setInterval

 

 

 

2、传统构造函数中重复的问题

练习:

创建一个 Person 构造函数,以创建对象,要求有 name、age、gender 和 sayHello

 

传统构造函数

 

传统构造函数问题:

1、由于对象是调用 `new Person()` 创建出来的,因此每一个对象在创建的时候,函数 sayHello 都会被创建一次
2、那么每一个对象都含有一个独立的,不同的,但是功能逻辑一样的函数。比如:`{} == {}`
3、在代码中方法就会消耗性能,最典型的资源就是内存
4、这里最好的办法就是将函数体放在构造函数之外,那么在构造函数中之需要引用该函数即可

 

改良版

 

改良版问题:

可以将考虑将方法全部放到外面但是有安全隐患

 

第一个script标签写构造函数定义,第二个script标签调用该构造函数。

虽然是两个script标签包裹的代码,但实际上和将第二个script标签包裹的代码剪切复制到第一个script标签代码的后面效果是一样的。

一个项目中,我们可能会引入多个第三方JS库,这时候如果你将构造函数的方法全都暴露在外面,很有可能你的某一个或某几个构造方法名与某个第三方库里的变量重名。

 

改良版问题的解决思路:
外面的函数如果不占用名字,而且在函数旗下就好了
不占用名字就不会引起冲突,写在函数旗下易于管理
 
 
改良版问题的解决思路的实现理论基础:
1、每一个函数在定义的时候,有一个神秘对象被创建出来,这个神秘对象作为该函数的属性被引用,函数.prototype,称其为函数的原型属性
2、每一个由该函数作为构造函数所创建的对象都会默认的连接到构造函数的原型属性上,这说明
  A、一个构造函数能创建无数个实例对象,这些实例对象和它的构造函数的原型属性默认的存在一种联系,说明构造函数的原型属性是被所有实例对象所共享的
  B、如果实例对象去访问一个方法或属性的时候,如果该对象没有,它会去它的构造函数的原型属性中去找。
  

3、构造函数

 

p1、p2对象本身没有 sayHello 方法,但它们的构造函数的原型属性上有 

 

4、原型相关的概念

 

继承就是,我没有的,把别人的东西拿来用

 

 

 

 

5、原型相关概念的图解

 

 

6、

 

posted @ 2018-03-02 12:14  有山有水有鬼  阅读(165)  评论(0编辑  收藏  举报