Javascript面向
一、前言
面向对象:专注于由哪一个对象来解决这个问题,编程特点是出现了一个类,从类中拿到对象,由这个对象去解决具体问题。
对于调用者来说,面向过程需要调用者自己去实现各种函数。而面向对象,只需要告诉调用者,对象中具体方法的功能,而不需要调用者了解方法中的实现细节。
二、Javascript面向对象
2.1 定义类
//定义 function 类名(形参){ this.属性 = 形参; } // 创建对象 var 对象名 = new 类名(实参)
事例:
//类 function Foo(n){ this.name = n; } // 对象 var obj =new Foo('bigberg'); obj.name;
注:this 代指对象(类似python中的self)
创建对象 new + 类名(参数)
三、Javascript的原型
3.1 javacript中的方法调用
事例:
function Foo(name){ this.name = name; this.sayName = function(){ console.log(this.name); } } //创建obj1 var obj1 = new Foo("bigberg"); obj1.sayName() //创建obj2 var obj2 = new Foo("eric"); obj2.sayName()
这样有一个问题,方法就不能共享了,js是在每个对象里面都保存了一份,所以这样很占内存的。在python中,方法都是保存在类中的,对象中只保存属性,当对象调用方法时,是去类中调用同一个方法,这样就不会重复创建。
//python class Person(object): def __init__(self,name): self.name = name def eat(self): print("%s like eatting beaf. " %(self.name)) obj = Person('bigberg') obj.eat()
3.2 JavaScript的原型
对象调用方法时,自动去找它这个类,然后通过这个类的原型里面再去找对应的方法
function Foo(name){ this.name = name; } //创建Foo的原型 Foo.prototype = { 'sayName' : function(){ console.log(this.name); } }; var obj = new Foo("bigberg"); obj.sayName(); //调原型中的sayName方法
利用类的原型去调用类中公用的方法