面向对象的学习

1、面向对象的三要素。

(1)封装。 (2)多态。 (3)继承。 

1、 封装 

       在js中,重点在于访问权限。在其他原生支持面向对象语言中,一般支持public、protected、private三个关键字来控制访问权限,但在js中,我们只能依靠复杂的作用域关系来控制:

2、 继承 

继承的实现,主要有2种方法:第一种是使用javascript本身的原型模型,通过给prototype赋值并改变其constructor属性来实现继承;第二种方法是不使用prototype,手动实现将父对象的所有属性方法深拷贝到子对象。比如A需要继承B,第一种写法可以:A.prototype=new B();A.prototype.constructor=A; 第二种写法可以写一个递归,或者使用jquery中的方法extend。另外,如果要实现多继承的话,prototype就真的好麻烦了(需要依次多个类,还要建空对象来接),第二种方法就比较简单,依次拷贝即可。一般这种继承为了找父类方便,可以在对象中加个属性,引用父类。 

3、 多态 

函数重载就不说了,都会,检查参数即可,很灵活。隐藏属性就是直接赋值undefined。需要注意的是,如果是打算继承B类的prototype,一定要建一个空对象来接,否则的话,你给类写方法的话,相当于直接修改了prototype,就算不写方法,你最后修改constructor时也会造成继承链错乱,接个空对象很容易: 

2、设计一个三维向量类,并实现向量的加法、减法以及向量瑜标量的乘法和除法

实例代码:

class vector3:
 def __init__(self, x_ = 0, y_ = 0, z_ = 0):
  self.x = x_
  self.y = y_
  self.z = z_
 def __add__(self, obj):
  return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z)
 def __sub__(self, obj):
  return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z)
 def __mul__(self, obj):
  return vector3(self.x*obj.x, self.y*obj.y, self.z*obj.z)
 def __pow__(self, obj):
  return vector3(self.y*obj.z-obj.y*self.z, self.z*obj.x-self.x*obj.z, self.x*obj.y-obj.x*self.y)
 def __str__(self):
  return str(self.x)+‘,‘+str(self.y)+‘,‘+str(self.z)
v1 = vector3(1, 2, 3)
v2 = vector3(0, 1, 2)
print (v1 + v2)
print (v1 - v2)
print (v1 * v2)
print (v1 ** v2)

 

posted @ 2019-04-17 23:32  小小白了白  阅读(231)  评论(0编辑  收藏  举报