javascript面向对象思想的学习(二)
随着学习的进行,不可避免的要学习使用面向对象的思想去解决问题,然而经过好多资料的查询都并没有很好的解决自己的问题,那些讲解很好理解,但是却不会熟练的运用到解决实际问题中。所以先把自己理解的一些东西做些总结记录。
javascript是一种基于原型的语言,要和java、c++等基于类的语言区分清楚,js只有对象。具有一种所谓的原型对象(prototypical object)的概念,原型作为一个模板,新的对象可以从中获取他的属性。任何对象都可以指定自身的属性,既可以创建时也可以在运行时创建。而且任何对象都可以作为另一个对象的原型,允许后面的对象共享前者的属性。
虽然javascrpt中时没有类这个概念的,javascript中的原型其实就相当与java中的类,网上有好多关于面向对象原型的创建,对象的继承等,在这里我把javascript中的“类”方法和实例方法做一个简单区分和介绍。
function Person(){ //声明一个类 this.constructMethod = function(){}; //添加构造构造方法 }; Person.classcMethod = function(){}; //添加类方法 Person.prototype.protocMethod=function(){};//添加原型方法
区别:
Person.classMethod();//类方法直接调用,谁都可以调用 2 var student = new Person(); 3 student.constructMethod();//构造方法,只有他的实例才能调用 4 student.protoMethod();//原型方法也是只有他的实例才能调用
介绍:
一:类方法在内存中只会有一份,因为它只属于类本身,在实际中,我们一般不会用到类方法。写出来主要是知道它而已
二:构造方法和原型方法都是实例的,但是构造方法会在每一次new Class()时,都在内存中产生一个新的副本。通常这种方法我们用在实例间的不同之处。每个实例的构造方法互不影响。但是显然,它又占据内存了。原型方法就正好相反,它不会随着new Class()时产生新的副本,它在内存中也只有一份。可以实现实例间的共享。同时也节约了内存。
总结:在开发时,一般不会用到类方法,将有共性的方法做成原型方法,将有个性的方法做成构造方法。
提到构造方法,可以在他的实例中添加方法
function Person(){}; var student = new Person(); student.instanceFn=function(){};//添加实例方法