第八节-原型的想要父类某属性继承

如果我们想要父类的某个属性的,但是又不想全部都继承过来的话,我们要怎么做呢?

  function Person(name) {
    this.name = name;
}
function Teacher(name,books) {
    //调用父类的构造函数
    Person.call(this,name);
    //为自己的属性赋值
    this.books= books;
}

//这两步不能省
Teacher.prototype = new Person();
Teacher.prototype.constructor = Teacher;

Teacher.prototype.show= function(){
     document.write(this.name+"喜欢看"+this.books);
    }

var peter = new Teacher("hjm","英语");
peter.show();

但是这样的写的话就会很麻烦。如何有多个类都实现了继承了那要怎么办呢?下面的代码实现了藕耦合。

function extend(subClass,superClass){
        //1.定义一个中间空对象,为了转换主夫类关系
        var F = function () {}
        F.prototype = superClass.prototype;

        //2.让子类继承F 
        subClass.prototype = new F();
        subClass.prototype.constructor = subClass;

        //3.为子类添加父类的属性
        subClass.superClass = superClass.prototype;
        //4.增加保险
        if(superClass.prototype.constructor== Object.prototype.constructor)
        {
            superClass.prototype.constructor=superClass;
        }
    }

    function Author(name,books){
        Author.superClass.constructor.call(this,name); 
  //Person.call(this,name); 当我想随意改变一个父类的话,上面写法更有高效性
        this.books = books;
        this.getBooks = function(){
            document.write(this.name +"->"+this.books); 
        }
    }
    extend(Author,Person);
    var peter = new Author("小红 ","数学");
    peter.getBooks();//小红 ->数学

什么是松藕合

很多设计模式就是为了解决紧耦合的问题。如果两个组件耦合太紧,则说明一个组件和另一个组件直接相关,这样的话,如果修改一个组件的逻辑,那么另外一个组件的逻辑也需修改。比如,假设有一个名为error的CSS类名,它是贯穿整个站点的,它被嵌入到HTML之中。如果有一天你觉得error的取名并不合适,想将它改为warning,你不仅需要修改CSS还要修改用到这个className的HTML。HTML和CSS紧耦合在一起。这只是一个简单的例子。想象一下,如果一个系统包含上百个组件,那这简直就是一场噩梦。

当你能够做到修改一个组件而不需要更改其他的组件时,你就做到了松耦合。对于多人大型系统来说,有很多人参与维护代码,松耦合对于代码可维护性来说至关重要。你绝对希望开发人员在修改某部分代码时不会破坏其他人的代码。

当一个大系统的每个组件的内容有了限制,就做到了松耦合。本质上讲,每个组件需要保持足够瘦身来确保松耦合。组件知道的越少,就越有利于形成整个系统。

有一点需要注意:在一起工作的组件无法达到"无耦合"(no coupling)。在所有系统中,组件之间总要共享一些信息来完成各自的工作。这很好理解,我们的目标是确保对一个组件的修改不会经常性地影响其他部分。

如果一个Web UI是松耦合的,则很容易调试。和文本或结构相关的问题,通过查找HTML即可定位。当发生了样式相关的问题,你知道问题出现在CSS中。最后,对于那些行为相关的问题,你直接去JavaScript中找到问题所在,这种能力是Web界面的可维护性的核心部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值