原型prototype


将函数定义在全局作用域中的缺点:

1.会污染全局作用域的命名空间,如:函数functionA(),那么在全局作用域中就不能再出现functionA这个命名了。

2.定义在全局作用域中不安全。

因此,就用到了主角----原型


1.所有的函数都有原型对象

JS原型对象

2.当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性__prototype__,来指向该函数的原型对象。

例:

JS原型对象

JS原型对象


3.原型对象相当于一个公共区域(变向的全局作用域),所有同一个类的实例都可以访问到这个原型对象,

    这样我们就可以将对象共有的内容,属性,方法,统一设置到原型对象中。


4.原型对象也有原型对象,通过__proto__访问


5.当我们访问对象的一个属性或方法时,


    它会先在对象自身中寻找,如果有则直接调用,

    如果没有则会去原型对象中找,有则调用,没有则继续在原型对象中的原型对象中找,如找到则直接调用。

例子:JS原型对象


总结:创建构造函数时,将共有的属性和方法统一添加到啊构造函数的原型对象中,省去了为没一个对象添加的繁琐,也不会影响到全局作用域。



相关文章: