zoukankan      html  css  js  c++  java
  • 原型对象

    在上一篇文章中写道,在Person构造函数中,为每一个对象都添加了一个sayName方法是没有必要的,完全可以使所有的对象都调用一个方法。可以通过 将一个全局作用域下的函数赋值给类的属性。

    但是,

    将函数定义在全局作用域,会污染了全局作用域的命名空间,而且定义在全局作用域中也很不安全。

    为了解决这个问题,接下来,我们引入原型对象。

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title></title>
     6     <script type="text/javascript">
     7    /* 原型prototype 
     8    我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
     9    这个属性对应着一个对象,这个对象就是我们所谓的原型对象
    10    
    11    如果函数作为普通调用prototype没有任何作用
    12    当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,
    13    指向该构造函数的原型对象,可以通过__proto__来访问
    14    
    15    原型对象相当于一个公共的区域,所有同一个类是实例都可以访问到这个原型对象
    16    可以将对象中共有的内容,统一设置到原型对象中
    17    
    18    当我们访问对象的一个属性或方法是,它会先在对象自身中寻找,如果有则直接使用,
    19    如果没有则会去原型对象中寻找,如果找到则直接使用
    20    所以,可以将对象共有的属性或方法添加到构造函数的原型对象中
    21    */
    22   
    23   function Person(){
    24       
    25   }
    26   function MyClass(){
    27       
    28   }
    29   //向MyClass的原型中添加属性a
    30   MyClass.prototype.a=123;
    31   MyClass.prototype.name="我是原型中的名字";
    32   var mc=new MyClass();
    33   console.log(mc.a);//123
    34   console.log(mc.__proto__);
    35   console.log(Person.prototype==MyClass.prototype);//false
    36   //使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true
    37   console.log("name" in mc);//true
    38   //可以使用对象的hasOwnProperty()来检查对象自身是否含有该属性
    39   //使用该方法只有当对象自身中含有属性时,才会返回true
    40   console.log(mc.hasOwnProperty("name"));//true
    41   /*
    42   原型对象也是对象,所以也有原型
    43   当我们在使用一个对象的属性或方法时,会先在自身中寻找
    44     自身中如果有,则直接使用
    45     如果没有则去原型对象中寻找,如果原型对象中有则使用
    46     如果没有则去原型的原型中寻找,直到找到Object对象的原型
    47     Object对象的原型没有影响,如果在Object中仍然没有找到,则返回undefined
    48   */
    49   console.log(mc.__proto__.hasOwnProperty("hasOwnProperty"));//false
    50   console.log(mc.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));//true
    51     </script>
    52     <head>
    53     <body>
    54     </body>
    55 </html>
  • 相关阅读:
    MT【235】两道函数题
    MT【234】正方形染色(二)
    MT【233】染色正方形
    MT【232】展开式中的系数
    MT【231】棋子方法数
    MT【230】一道代数不等式
    MT【229】最小值函数
    MT【228】整数解的个数
    Python-list中的排序
    IO多路复用
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/11222176.html
Copyright © 2011-2022 走看看