口口相传的 JS 的面相对象的封装与继承

1,581 阅读2分钟


以前读书上java课的时候

天天要面向对象

然后我还记得

老师说去面试一定会被问面向对象的问题

然而

至今为止

我也就遇到一个人问过我这个问题


However

我一直也就待在一家公司里




面向对象语言的要求

一种面向对象语言需要向开发者提供四种基本能力:


  1. 封装 - 把相关的信息(无论数据或方法)存储在对象中的能力

  2. 聚集 - 把一个对象存储在另一个对象内的能力

  3. 继承 - 由另一个类(或多个类)得来类的属性和方法的能力

  4. 多态 - 编写能以多种方法运行的函数或方法的能力





每次写js 好像就是 everything is 对象

但是写起来又乱七八糟  代码好坏层次不齐


可能还没有掌握面向对象编程

虽然我对象常常都面对着我在编程





一般我们如果写一个计时器



这样看着好像很不错了

想要调用方法就timer.f_timer() 一下 然后获取timer.n

但是实际想想

timer 里面的属性跟timer 也没有什么区别,他们的可访问性跟timer是一样的

如果timer是全局,里面的属性也是全局的

要改里面的n 随便改改



所以一般情况下

会这样写



可是这样写就又不是很好

timer1.f_time 和 timer2.f_time  的是互相独立的

每使用 new 运算符调用 timer() 

就会生成一个新的对象并生成一个新的函数绑定在这个新的对象上

每构造一个新的对象

浏览器就要开辟一块空间

其实最好就是 timer1.f_time 和 timer2.f_time 指向同一个函数对象


然后就要用到

原型 prototype 



原型 prototype  f_times 依赖的是timer 而不是time1跟time2



但是奇怪的事情就是这样的

大多数



我还是用最上面那种写法



ps:早睡早起,常做运动,多与异性交朋友~