地图的开发研究–基于openlayers+geoserver+tomcat的离线地图–前期技术准备prototype

  在学习openlayers的过程中,由于OpenLayers采用面向对象方式开发,并使用来自Prototype.jsRico中的一些组件需要js面向对象即prototype原型知识,所以花了两天时间来学习消化相关方面的知识,并对其中核心的知识进行了整理小结。

   最后开始学习openlayers的知识,配置geoserver地图服务器,实现从geoserver服务器上调用本地地图。


Js面向对象技术:

参考资料:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html

 

l 几种声明写法:

1. //直接以对象来写 jsTest即为对象 

 声明:var jsTest={

  name:’test’//属性值

  testmethod: function () {…}//function函数

}

 调用:直接jsTest.name调用属性值,直接jsTest.testmethod调用函数,

 总结:javascript对象函数是直接声明,直接赋值,直接就用了。runtime的动态语言。函数   可以在使用时临时声明,并把一个全局函数直接赋过去就好了。

 

2. //function来做class

声明:var Person = function(name, email, website){

    this.name = name;

  this.email = email;//属性值

    this.testmethod= function(){  //成员函数

    var hello = “Hello, I’m “+ this.name + “, \n” +”my email is: ” + this.email + “;

   alert(hello);};};

调用:类似java的面向对象技术,需要先实例化class

      var demo= new Person(“demo”, demo@qq.com“);

      demo.name ;//调用成员属性值

    demo.testmethod();//调用成员函数

 

——- javascript的方法可以分为三类:

类方法

对象方法

原型方法

 

 function People(name)

{

this.name=name;

//对象方法

this.Introduce=function(){

 document.write(“My name is “+this.name + “<br>”); 

}

 

}

//类方法

People.Run=function(){

 document.write(“I can run”+ “<br>”); 

 

}

//原型方法  

People.prototype.IntroduceChinese=function(){

document.write(“我的名字是“+this.name+ “<br>”); 

}

 

 

 

—— 核心内容 prototype

 

  原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。

  javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。如上面所讲,js的对象是动态语言,prototype就充分体现了动态性,相比于java面向对象语言,使用prototype可以动态为类对象添加方法和属性,只要实例化js类后就可以调用新添加的方法和属性,而不需要改变类的原先的结构。

 

基本格式:

对象名称.prototype = {
属性一 属性值,
方法一 : function(参数列表) {
 方法体;
}
}

或者

 对象.prototype .方法名=function(){

}

 

另外prototype 也可以用于面向对象类似的继承和重载:如

      A.prototype = new B();

AprototypeB的一个实例,可以理解AB中的方法和属性全部克隆了一遍。A能使用B的方法和属性。

function B()

{

    this.showMsg = function()

    {

        alert(“baseClass::showMsg”);   

    }

}

 

function A()

{

}

 

A.prototype = new B();//A是以B的一个实例为原型克隆创建,“继承”B对象的方法和属性

var instance = new A();

A.showMsg();//显示baseClass::showMsg,

:1.如果类A也定义了一个同名的方法showMsg(),则调用方法的时候显示的是A本身定义的方法,这点和java面向对象的继承很相似,可以理解为:函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。或者可以理解为prototype不会克隆同名函数。 

   2.java中我们可以使用super.方法()来调用父类的方法,js里面使用call()方法,如上述代码可以用new B().showMsg .call(instance)来调用类B的对象的同名方法,理解为:instance当做B的一个实例来调用,调用它的对象方法showMsg

   3.删除对象的成员:delete A.属性/方法或者delete A[‘属性/方法’]

    

   总结:js的面向对象技术相对于java来说,不是那么的严格,是runtime的动态语言,由于其这方面的特性,产生了prototype机制,网上有人说是“委托”机制,也有人说是“克隆”,通过这个机制,我们可以很方便的为类的对象根据需要随意增删改成员函数和属性,而只需要实例化一次对象,并且不需要改变类的成员结构。但是由于其随意性,后期代码的调试维护难度也会增大。

转载自:https://blog.csdn.net/songjian1314/article/details/17263515

You may also like...