dojo.trim
用于去除字符串前后空格
require(["dojo/_base/lang"],function(lang){
function trim(str){
return "-"+lang.trim(str)+"-";
}
trim(" meng");//-meng-
trim("meng ");//-meng-
trim(" meng ");//-meng-
trim(" meng meng");//-meng meng-
});
dojo.replace
用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
require(["dojo/_base/lang","dojo/_base/array"],function(lang,array){
//使用替换的字典:
lang.replace("Hello, {name.first} {name.last} AKA {nick}!",{
nick: "Bob",
name: {
first: "Robert",
middle: "X",
last: "Cringely"
}
});// returns: Hello, Robert Cringely AKA Bob!
//使用替换的数组:
lang.replace("Hello, {0} {2}!",["Robert", "X", "Cringely"]);
//returns: Hello, Robert Cringely!
//使用替换的函数:
function sum(a){
var t = 0;
array.forEach(a, function(x){ t += x; });
return t;
}
lang.replace("{count} payments averaging {avg} USD per payment.",lang.hitch(
{ payments: [11, 16, 12] },function(_, key){
switch(key){
case "count": return this.payments.length;
case "min": return Math.min.apply(Math, this.payments);
case "max": return Math.max.apply(Math, this.payments);
case "sum": return sum(this.payments);
case "avg": return sum(this.payments) / this.payments.length;
}
}
));//returns:"3 payments averaging 13 USD per payment."
//使用替换另一个PHP模式:
lang.replace("Hello, ${0} ${2}!",["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g);
//returns:"Hello, Robert Cringely!"
});
dojo.isString
用于判断所传参数是否为字符串
require(["dojo/_base/lang"],function(lang){
lang.isString("mengmeng");//true
lang.isString(123);//false
});
dojo.isArray、dojo.isArrayLike
用于判断所传参数是否为数组。两者的区别是:dojo.isArrayLike来检测类似数组的对象。例如:arguments对象
require(["dojo/_base/lang"],function(lang){
lang.isArray([1,2,3]);//true
lang.isArray("1,2,3");//false
});
dojo.isFunction
用于判断所传参数是否为函数对象。注意,这对于由dojo.declare 所创建的类(的构造函数)也一样有效。一个常见的模式是,得到一个字符串形式的类名全称,你可以用 dojo.isFunction来判断是否需要将其转换为一个函数:
require(["dojo/_base/lang"],function(lang){
var thing = "dijit.form.Button";
if(!lang.isFunction(thing)){
thing = lang.getObject(thing);//转为对象
}
var button= new thing({ name:"meng" });
console.info(button.domNode);
});
dojo.isObject
用于检测所传参数是否为对象。
dojo.isAlien
用于检测所传参数是否为内建函数。此方法将在2.0版本移除
dojo.mixin
用于扩展实例对象。是将两个对象从右到左组合起来,覆盖最左边的对象,并且返回混入后的对象。
require(["dojo/_base/lang"],function(lang){
var obj={name: "Frylock",braces: true};
lang.mixin(obj,{
name: "Carl Brutanananadilewski"
});//obj={name: "Carl Brutanananadilewski",braces: true}
});
dojo.extend
用于扩展一个对象的原型。和mixin 一样是将右侧对象的成员直接合并进入第一个参数的对象。
require(["dojo/_base/lang","dijit/Dialog"],function(lang,Dialog){
//dijit.Dialog扩展一个setTitle方法
lang.extend(Dialog,{
setTitle:function(name){
this.set('title',name)
};
})
});
dojo.setObject
在对象 context中创建名称为 name,值为 value的属性。属性 name同样支持“.”分隔的形式.不指定 context对象时默认为全局对象。
var obj={};
if(!obj["parent"]){ obj.parent = {}; }
obj.parent.prop = "some value";
通过这个例子可以看出在JS中如果要给obj对象中的parent对象设置prop属性时,需要判断obj中的parent是否存在,如果不存在则创建一个空对象。使用dojo.setObject 则可以简化。require(["dojo/_base/lang"],function(lang){
lang.setObject("parent.prop", "some value", obj);
});
dojo.getObject
方法用来从 context对象中获取名为 name的属性。name属性支持类似 com.example.abc这样的“.”分隔的形式。如果指定参数 create的值为 true,当属性 name不存在的时候,会创建该属性并设置其值为空对象。不指定 context对象时默认为全局对象。
require(["dojo/_base/lang"],function(lang){
var foo = {bar: "some value"};
lang.getObject("foo.bar"); // returns "some value"
lang.getObject("foo.barz"); // returns undefined
lang.getObject("foo.barz",true);// returns foo.baz - an empty object {}
lang.getObject("bar", false, foo); // returns "some value"
});
dojo.exists
用于检查一个字符串中利用点号’.’分隔的所有对象是否存在。在需要检测一个较长的对象路径时,使用dojo.exists会很方便。
require(["dojo/_base/lang"],function(lang){
var foo = {
bar: {}
};
// search the global scope
lang.exists("foo.bar"); // true
lang.exists("foo.bar.baz"); // false
// search from a particular scope
lang.exists("bar", foo); // true
lang.exists("bar.baz", foo); // false
});
dojo.hitch
它返回一个函数,它将在一个给定的范围内执行一个给定的函数。此功能允许您控制函数执行的方式,特别是在异步操作中。
require(["dojo/_base/xhr"],function(xhr){
var args = {
url: "foo",
load: this.dataLoaded
};
xhr("GET",args);
});
这段代码执行会怎么样呢?会报错。说dataLoaded不是个方法,或找不到。为什么呢。从代码中可以看出参数args的load想调用外部一个dataLoaded的方法。但是this引用却指向了args。而args里面可没有dataLoaded。如何解决呢?
require(["dojo/_base/lang","dojo/_base/xhr"],function(lang,xhr){
var args = {
url: "foo",
load: lang.hitch(this, "dataLoaded")
};
xhr("GET",args);
});
用dojo.hitch来控制dataLoaded函数执行的作用域为this,这个问题也就迎刃而解了。dojo.partial
用于控制传递给函数的参数。可设置函数的第一个参数为自定义的参数,其余参数为可变化的。
require(["dojo/_base/lang","dojo/_base/xhr"],function(lang,xhr){
var dataLoaded = function(someFirstParam, data, ioargs){};
var args = {
url: "foo",
load: dataLoaded
};
xhr("GET",args);
});
那么,当xhr请求返回的时会调用 dataLoaded函数 ,但是xhr 请求 load函数期待的参数结构应该是: load(data, ioargs)。那么在 dataLoaded的第一个参数已经确定为 "someFirstParam"的情况下,我们如何去保证 xhrGet对于参数的要求能得到满足 ? 使用 dojo.partial!require(["dojo/_base/lang","dojo/_base/xhr"],function(lang,xhr){
var dataLoaded = function(someFirstParam, data, ioargs){};
var args = {
url: "foo",
load: lang.partial(dataLoaded, "firstValue");
};
xhr("GET",args);
});
它所做的是创建一个新的函数,这个函数封装了 dataLoaded函数并且指定了第一个参数 "firstValue"。需要注意的是, dojo.partial允许你指定多个参数,因此你可以定义任意数量的参数作为函数固定前置的参数。dojo.clone
用于克隆对象或者DOM节点。返回克隆后一个新的对象或者DOM节点。
require(["dojo/_base/lang","dojo/dom", "dojo/dom-attr"], function(lang, dom, attr){
//clone an DomNode
var node = dom.byId("someNode");
var newnode = lang.clone(node);
attr.set(newnode, "id", "someNewId");
// clone an object
var obj = { a:"b", c:"d" };
var thing = lang.clone(obj);
// clone an array
var newarray = lang.clone(["a", "b", "c"]);
});