ES5 javascript如何应用面向对象编程以及类的继承

首先javascript都是基于对象操作的,但javascript并不是面向对象编程的语言;它没有类的一些特性,class,extends等,js的编程模式应该叫函数式编程;
以上说的基于ES6之前的;ES6版本之后,js也有了class的语法糖了;js的class语法糖,甜到太平洋;
当然这里我不多说Es6,由于h5的比赛是基于ES5标准的,因此我还是说说ES5如何应用面向对象编程;如果你有兴趣再去了解ES6的面向对象编程模式,你就会知道这块语法糖有多甜了;

切入正题

先定义一个person类,里面有name和age两个属性,和一个say()方法,我们用this来定义他们为独立属性,不会继承到子类去

function person(){
    this.name = 'kervi';
    this.age = 18;
    this.say = function(){
            alert('hi');
    }
}

然后我们在给这个person类添加gender属性,和run()方法,这些属性是公共的,可以给子类基础的,我们用类的prototype属性来实现:

person.prototype.gender = 'man';
person.prototype.run = function(){
    alert('runing~');
}

现在,我们new一个对象出来,用say方法打个招呼~,并且访问一下他的age属性和gender属性;

   kervi = new person();
    alert(kervi.gender);
    alert(kervi.age);        
    kervi.say();   
//弹出框    man
//弹出框      18
//弹出了框   hi

接着,我们定义另外一个类me,里面什么都不写。然后我们要他继承person;我是实现的方法是 把person的prototype属性赋值给me的prototype;
function me(){}
me.prototype = person.prototype; //让me继承person的公共属性

重点来了,我们new一下me,实例化一个obj对象

  obj = new me();

前面的定义中,我们是没有给me类定义任何属性和方法的,继承了person;现在我们用obj对象调用一下公共方法run(),看看他是否继承了person的方法,再条用一个person的独立属性age,看看能否调用得了;

  obj.run();
//弹出框   runing~
 alert(obj.age);
//弹出框   undefined   # undefined()未定义)说明调用不到独立属性

总结一下

  1. ES5可以用个this关键字来定义类的独立属性,可以用prototype来定义类的公共属性;
  2. ES5中,类继承 继承可以用prototype属性来实现(将父类的prototype属性赋值给子类的prototype)

拓展一下

在类中,this指的是类本身
prototype代表的则是 类的原形

ES5的面向对象编程的缺点很明显,就是可读性低。当你用ES6来进行面向对象的时候你就会发现这其中的差距了;简单写下ES6的类语法糖

class peron{
    constructor (){  //注意下属性要写在 constructor方法里
        this.name = 'kervi';
        this.age = 18;
    }
    say (){alert('hi');}
}
kervi = new person();
kervi.say();

类的特性很直观,可读性很高==错误率低,你可以早点回家啦;当然,ES6的特点不止如此,还添加了static,extends等关键字,待你去研究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jayLog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值