zoukankan      html  css  js  c++  java
  • JavaScript ----------------- 原型式继承

     思想:借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。为了达到这个目的,看看下面的实现方式

      

    1        function object(o){
    2             function F(){
    3                 
    4             }
    5             F.prototype=O;
    6             return new F();
    7         };

    在上面的代码段中主要做了哪些事情尼?

      创建了一个临时的构造函数,同时把传入参数作为临时构造函数的原型,最后返回一个临时构造函数的实例;从本质上来讲,object 对传入其中的对象执行了一次浅复制;

      

     1      
          //看实例:
          function object(o){ 2 function F(){ 3 4 } 5 F.prototype=o; 6 return new F(); 7 }; 8 9 //在上面中 10 11 var person={ 12 name:"Nicholas", 13 friends:["Shelby","Court","Van"] 14 } 15 16 var person1 = object(person); 17 person1.name = "Greg"; 18 person1.friends.push("Rob"); 19 20 21 var person2 = object(person); 22 person2.name = "Linda"; 23 person2.friends.push("Barbie"); 24 25 alert(person.friends); // Shelby Court Van Greg Rob

    对于这种继承方式必须依赖于存在一个对象作为另一个对象的基础。如果有这么一个对象的话,可以把它传递给object()函数,然后再根据具体需求对得到的对象加已修改即可。

    实例从结果可以看出,person1与person2 就是person对象的副本。

    ECMAScript5中通过新增Object.create() 方法规范化了原型式继承。这个方法接收两个参,当只传一个参数的时候与object()行为相同。

    @param1   接收一个对象
    @param2   可选  接受一个为新对象定义的额外属性的对象,类似 Object.defineProperties()方法的参数格式相同:每个属性都是通过自己的描述符定义的;已这种方式创建属性都会覆盖原型上的同名属性。
    Object.create()
            var person={
                name:"Nicholas",
                friends:["Shelby","Court","Van"]
            }
            
            var person1 = Object.create(person,{
                name:{
                    value:"Greg"
                }  
            });
            person1.name;  // Greg   

        
     1       var person={
     2             name:"Nicholas",
     3             friends:["Shelby","Court","Van"]
     4         }
     5         
     6         var person1 = Object.create(person,{
     7             name:{
     8                 value:"Greg",
     9                 enumerable:false
    10             }  
    11         });
    12        name in person1;  // false
    13         

      综合上一篇的组合继承,在没有必要创建构造函数,而指想让一个对象与另一个对象保持类似的情况下,原型式继承是完全可以胜任的。不过别忘了,包含引用类型值得属性始终都会共享相应的值,就像使用原型模式一样。

     

      

  • 相关阅读:
    ~/.fvwm/.fvwm2rc
    我的.Xresources
    getopt得用法
    C语言编程好习惯(持续更新)
    关于stm32的USB学习笔记之usbcore.c
    Fvwm.desktop内容
    XP下JDK不能安装的解决办法
    以后网络上的好东东,在这里加个链接,呵呵!太丰富了!
    ISO/OSI七层参考模型
    VC 和 MFC 的一些常见问题
  • 原文地址:https://www.cnblogs.com/czhyuwj/p/5616519.html
Copyright © 2011-2022 走看看