zoukankan      html  css  js  c++  java
  • JavaScript设计模式-3.原型模式

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>js高级语法3-原型模式 </title>
     6     </head>
     7     <body>
     8         <script>
     9             /*
    10              javascript原型模式(prototype):
    11             1. 原型是一个对象,其他对象可以通过它实现属性的继承,所有的对象在默认的情况下都有一个原型。
    12              因为原型的本身也是对象。所以一个类的真正原型是被类的内部的prototype属性所持有。
    13             2.什么可以称之为对象?
    14             在javascript中,一个对象就是任何的无序的键值对的集合。
    15             如果他不是一个主数据类型(undefined,null,boolean,number,string)
    16             其他的通通叫做对象
    17             */
    18             
    19             /*
    20              javascript中的原型是和函数紧密连接的;
    21              var o ={} 他不是用function定义的,他有原型吗?
    22              有。
    23              每个通过函数和new操作符生成出来的对象都持有一个属性  __proto__,这个属性
    24              保存了创建他的构造函数的prototype的原型引用。
    25              * */
    26             /*
    27             function Person(){}  // 定义一个空对象
    28             Person.prototype.name="张三";
    29             Person.prototype.showName=function(){
    30                 //这个this表示调用本函数的一个具体实例化的类
    31                 alert(this.name);
    32             }            
    33             new Person().showName();
    34             
    35         
    36             var cat = {};
    37         //    cat.prototype.name="112";//报错,prototype未定义
    38             //默认隐藏的调用下面的代码:
    39             Object.getPrototypeOf(cat).name="zhangdan"; //这是获取隐藏原型的方法,浏览器支持度不好
    40             cat.__proto__.master = "javascript";
    41             //上边两个是显式调用,下面是隐式调用,作用是一样的
    42             cat.age=2;
    43             cat['sex']="man";
    44             
    45             alert(cat.name+" "+cat.master+" "+cat.age+" "+cat["sex"]);
    46         */        
    47              //利用原型模式实现简单继承
    48              function per(){
    49                  this.getName = function(str){
    50                      alert(str);
    51                  }
    52              }
    53              per.prototype.getAge = function(age){
    54                  alert(age);
    55              }
    56              //不完全继承 
    57              var a = {};//空类
    58              a.__proto__ = per.prototype; 
    59              //把要被继承的原型引用,赋值给要继承的类,相当于一个挂载
    60              //如果要继承的类是一个空类,那么就会完全继承
    61             a.getAge(3);
    62             //a.getName("张丹"); //这个方法 报错,因为继承的是原型,也就是上一级的所有东西,
    63             //但是不包括被继承类自身定义的属性和方法
    64             
    65         
    66             //简单方式实现继承(js中无法实现多继承)
    67             //完全继承
    68             var b = {};
    69             b.__proto__ = new per();
    70             b.__proto__.constructor = b;
    71             b.getAge(9);
    72             b.getName("xiaowang");
    73             
    74             //串联继承
    75             function m(){
    76                 this.showM = function(){
    77                     alert("I am is M ")
    78                 }
    79             }
    80             function n(){
    81                 this.showN = function(){
    82                     alert("I am is N ")
    83                 }
    84             }
    85             
    86             function k(){};
    87             n.prototype = new m();
    88             n.prototype.constructor = n;
    89             
    90             k.prototype = new n();
    91             k.prototype.constructor = k;
    92             var boo = new k();
    93             boo.showM();
    94             boo.showN();
    95         </script>
    96     </body>
    97 </html>
  • 相关阅读:
    CodeForces
    Educational Codeforces Round 111 (Rated for Div. 2)
    「JOISC 2020 Day4」治疗计划
    [杂题合集] 其真无码耶?
    [2021.7.16] 洛谷七月月赛
    倾心力作!嵌入式linux开发指南(RK3399),3399教程1500+,开发资料全覆盖
    资料丨迅为IMX6ULL开发板-主频和时钟配置例程(二)
    资料丨迅为IMX6ULL开发板-主频和时钟配置例程
    自学嵌入式拉低偏差丨4412开发板学习指引+为学习后面内容打下基础
    文档资源有话说丨再次升级-i.MX6Q开发板手册更新
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/7191739.html
Copyright © 2011-2022 走看看