码迷,mamicode.com
首页 > Web开发 > 详细

JS---原型继承和多重继承

时间:2016-12-08 23:15:18      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:方法   自身   常用操作   ror   使用   spec   mixin   bsp   模型   

概念:

1、原型继承是创建新类型对象----子类型,子类型基于父类型,子类型拥有父类型所有的属性和方法(从父类型继承得到),然后修改其中的部分内容或者添加新的内容。继承最好在子类型模型可以被视为父类型对象的时候使用。

2、从多个父类型中派生出一个对象类型称为多重继承。


 

一、原型继承

  使用new关键字和构造函数的prototype属性都是定义类型的特定方式,这些是我们到目前为止一直使用的,对于简单的对象,这种方式还是很好的,但是当程序过度使用继承时,这种创建对象的方法很快就显得笨拙了。所以增加一些函数作为常用操作符可以使其顺利一些。例如很多人都在对象上定义inherit方法和method方法。

Object.prototype.inherit=function(baseConstructor){
            this.prototype = clone(baseConstructor.prototype);
            this.prototype.constructor=this;
        };
        Object.prototype.method=function(name,func){
            this.prototype[name]=func;
        };

有了上面的信息,就可以像下面这样编码:

  function StrangeArray(){}
        StrangeArray.inherit(Array);
        StrangeArray.method("push",function(value){
            Array.prototype.push.call(this,value);
            Array.prototype.push.call(this,value);
        });
        var strange=new StrangeArray();
        strange.push(4);//输出[4,4]

 

二、多重继承(混合类型)

实现多重继承的方式很多,下面的一个小例子是比较简单的而且多数情况下都适用的。

  mix-in是一种特殊的原型,它可以混入到其他的原型里。SmallItem可以看做这样的一个原型。通过将它的方法复制到另一个原型里,其自身也混入了那个复制方法的原型。

function mixInto(object,mixIn){
            forEachIn(mixIn,function(name,value){
                object[name] = value;

            });
        };
        var SmallDetailedItem = clone(DetailedItem);
        mixInto(SmallDetailedItem,SmallItem);

        var deadMouse = SmallDetailedItem.create("Fred the mouse","he is dead");
        deadMouse.inspect();
        deadMouse.kick();

还有下面的例子就是三种继承的实现。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script>//The first way       function Person(name) {
            this.name = name;
        }
        Person.prototype.getName = function() {
            return this.name;
        }
        function Author(name, books) {
            this.books = books;
        }
        Author.prototype=new Person(name);
        Author.prototype.constructor=Author;
        Author.prototype.getBooks = function() {
            return this.books;
        }
        var au1=new Author("dororo1","Learn much");
        var au2=new Author("dororo2","Learn less");
        alert(au1.getName());
        alert(au2.getName());


//The second way

       function Person(name) {
           this.name = name;
       }
       Person.prototype.getName = function() {
           return this.name;
       }
       function Author(name, books) {
           this.inherit=person;
           this.inherit(name);
           this.books = books;

       }
       var au=new Author("dororo","Learn much");
      alert(au.getName()) ;





//The thrid way
       function Person(name) {
           this.name = name;
       }
       Person.prototype.getName = function() {
           return this.name;
       }
       function Author(name, books) {
           this.base = new Person(name);
           for(var key in this.base){
               if(!this[key]){
                   this[key]=this.base[key];
               }
           }
           this.book=books;
       }
       var au1=new Author("dororo1","work");
       var au2=new Author("dororo2","play");
       alert(au1.getName());
       alert(au2.getName());
       au1.book;
       au2.book;

    </script>
</head>
<body>

</body>
</html>

 

JS---原型继承和多重继承

标签:方法   自身   常用操作   ror   使用   spec   mixin   bsp   模型   

原文地址:http://www.cnblogs.com/queende7/p/6146760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!