OpenLayers 项目分析(三)-OpenLayers中定制JavaScript内置类
目录
(三)BaseTypes: OpenLayers中定制JavaScript内置类
OpenLayers不仅“自己”写了一些底层的类,像上回说的那些都是。同时也定制了一些JS的一些内置类,即对JS内置类的扩展。这个扩展主要包含3类:String,Number,Function,存在于BaseTypes.js文件中。
String:
OpenLayers对string类型定制了8个方法,分别是startsWith、contains、trim和camelize;还有另外4个方法:String. startsWith、String. contains、String.trim和String. Camelize,它们将会在3.0Version中被删除,可能是以前版本遗留下来的,这里就不说它们了。
[代码]js代码:
01 |
//Test
|
02 |
startsWith: function (str,
|
03 |
return (str.indexOf(sub)
|
04 |
} |
05 |
|
06 |
//Test
|
07 |
contains: function (str,
|
08 |
return (str.indexOf(sub)
|
09 |
} |
10 |
|
11 |
//Removes
|
12 |
trim: function (str)
|
13 |
return str.replace(/^\s*(.*?)\s*$/, "$1" ); |
14 |
} |
15 |
|
16 |
//Camel-case
|
17 |
//Ex."chicken-head"becomes"chickenHead", |
18 |
//and"-chicken-head"becomes"ChickenHead". |
19 |
//
|
20 |
camelize: function (str)
|
21 |
var oStringList
'-' ); |
22 |
var camelizedString
|
23 |
for ( var i
|
24 |
var s
|
25 |
camelizedString
|
26 |
} |
27 |
return camelizedString; |
28 |
} |
Number:
项目仅对number类型扩展了一个方法OpenLayers. Number. limitSigDigs(还有一个方法Number. limitSigDigs,同样在3.0中会删除)。
[代码]js代码:
01 |
//Limit
|
02 |
limitSigDigs: function (num,
|
03 |
var fig; |
04 |
if (sig
|
05 |
fig
|
06 |
} else { |
07 |
fig
|
08 |
} |
09 |
return fig; |
10 |
} |
Function:
扩展了两个方法bind 和bindAsEventListener(同样存在Function.bind和Function. bindAsEventListener两个被“遗弃”的函数)。
[代码]js代码:
01 |
//Bind
|
02 |
//Method
|
03 |
bind: function (func,
|
04 |
//
|
05 |
var args
|
06 |
return function ()
|
07 |
//
|
08 |
//
|
09 |
var newArgs
|
10 |
Array.prototype.slice.apply(arguments,
|
11 |
); |
12 |
return func.apply(object,
|
13 |
}; |
14 |
} |
15 |
|
16 |
//Bind
|
17 |
//object
|
18 |
bindAsEventListener: function (func,
|
19 |
return function (event)
|
20 |
return func.call(object,
|
21 |
}; |
22 |
} |
里说说这两个方法。
首先看看bind方法,这是一个能够被Function的实例得到的方法,如下所示:
[代码]js代码:
01 |
Function.prototype.bind
function ()
|
02 |
var _method
this ,
|
03 |
for ( var i
|
04 |
args.push(arguments[i]); |
05 |
return function (moreargs)
|
06 |
for ( var i
|
07 |
args.push(arguments[i]); |
08 |
return _method.apply(object,
|
09 |
} |
10 |
}; |
_method 代表Function实例自身,bind可接收多个参数,不过它绑定是是第一个参数,该参数是一个function或者是调用环境,后面的都是执行函数的参数。
[代码]js代码:
1 |
Function.prototype.bindAsEventListener
function (object)
|
2 |
var _method
this ; |
3 |
return function (event)
|
4 |
return _method.call(object,
|
5 |
} |
6 |
}; |
这里只是将object作为_method 引用的环境,就是说现在可以在object对象中这样使用,
object. _method (event||window.event)。
也许你注意到了Funtion扩展的两个方法一个用到了call而另一个用的是apply,其实这两个并没有什么太大的区别,只是参数传递的形式不同,如若没有参数要传递,那么这两个是一样的:
apply(obj[,argumentsArray]),call(obj[,arg1[,arg2…]])。
转载自:https://blog.csdn.net/giser_whu/article/details/45748363