首页 > 代码库 > dojo 官方翻译 dojo/_base/lang 版本1.10

dojo 官方翻译 dojo/_base/lang 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang

应用加载声明:

require(["dojo/_base/lang"], function(lang){  // lang now contains the module features});

clone()

 克隆任何对象或者元素节点,返回:一个新的对象。

require(["dojo/_base/lang"], function(lang){  // clone an object  var obj = { a:"b", c:"d" };  var thing = lang.clone(obj);  // clone an array  var newarray = lang.clone(["a", "b", "c"]);});

delegate()

返回值:委托的新对象。

require(["dojo/_base/lang", function(lang){  var anOldObject = { bar: "baz" };  var myNewObject = lang.delegate(anOldObject, { thud: "xyzzy"});  myNewObject.bar == "baz"; // delegated to anOldObject  anOldObject.thud == undefined; // by definition  myNewObject.thud == "xyzzy"; // mixed in from props  anOldObject.bar = "thonk";  myNewObject.bar == "thonk"; // still delegated to anOldObject‘s bar});

exists()

返回值:布尔类型。检查用点隔开的字符串的路径的所有对象是否存在,例如:“A.B.C”。第二个参数可选。

require(["dojo/_base/lang", "dijit/dijit"], function(lang, dijit){  var widgetType = "form.Button";  var myNamespace = docs;  if( lang.exists(widgetType, myNamespace) ){    console.log("There‘s a docs.form.Button available");  }else if( lang.exists(widgetType, dijit) ){    console.log("Dijits form.Button class is available");  }else{    console.log("No form.Button classes are available");  }});

extend()
返回值:返回扩展的类。功能和mixin类似。

require(["dojo/_base/lang", "dijit/TitlePane"], function(lang, TitlePane){  lang.extend(TitlePane, {    randomAttribute:"value"  });});

getObject()

返回值:以圆点分隔的字符串的对象的属性值。有第二个布尔类型的参数,可选,默认是false。第三个可选参数,是上下文,默认是global。

require(["dojo/_base/lang"], require(lang){  // define an object (intentionally global to demonstrate)  foo = {    bar: "some value"  };  lang.getObject("foo.bar"); // returns "some value"});

第二个参数,给定是true,将会在属性不存在的情况下,创建该属性。

require(["dojo/_base/lang"], function(lang){  // define an object (intetionally global to demonstrate)  foo = {    bar: "some value"  };  // get the "foo.baz" property, create it if it doesn‘t exist  lang.getObject("foo.baz", true); // returns foo.baz - an empty object {}  /*    foo == {      bar: "some value",      baz: {}    }  */});

mixin()
返回值:合并2个对象而成的新对象。合并从右向左,并重写左边对象。

require(["dojo/_base/lang"], function(lang){  var a = { b: "c", d: "e" };  lang.mixin(a, { d: "f", g: "h" });  console.log(a); // b: c, d: f, g: h});

extend()和mixin() 的区别:
extend,主要用户类的扩展;mixin,主要用户对象的扩展

require(["dojo/_base/lang", "dojo/json"], function(lang, json){  // define a class  var myClass = function(){    this.defaultProp = "default value";  };  myClass.prototype = {};  console.log("the class (unmodified):", json.stringify(myClass.prototype));  // extend the class  lang.extend(myClass, {"extendedProp": "extendedValue"});  console.log("the class (modified with lang.extend):", json.stringify(myClass.prototype));  var t = new myClass();  // add new properties to the instance of our class  lang.mixin(t, {"myProp": "myValue"});  console.log("the instance (modified with lang.mixin):", json.stringify(t));});

replace()
返回值:替换后的字符串。

字典模式

require(["dojo/_base/lang", "dojo/dom", "dojo/domReady!"], function(lang, dom){  dom.byId("output").innerHTML = lang.replace(    "Hello, {name.first} {name.last} AKA {nick}!",    {      name: {        first:  "Robert",        middle: "X",        last:   "Cringely"      },      nick: "Bob"    }  );});

数组模式:

require(["dojo/_base/lang", "dojo/dom", "dojo/domReady!"], function(lang, dom){  dom.byId("output").innerHTML = lang.replace(    "Hello, {0} {2} AKA {3}!",    ["Robert", "X", "Cringely", "Bob"]  );});<p id="output"></p>

方法模式:。最后还有自定义模式。

require(["dojo/_base/array", "dojo/_base/lang", "dojo/dom", "dojo/domReady!"],function(array, lang, dom){  // helper function  function sum(a){    var t = 0;    array.forEach(a, function(x){ t += x; });    return t;  }  dom.byId("output").innerHTML = 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;        }      }    )  );});<p id="output"></p>

setObject()
给由点分隔的字符串的属性赋值。

//之前的做法// ensure that intermediate objects are availableif(!obj["parent"]){ obj.parent ={}; }if(!obj.parent["child"]){ obj.parent.child={}; }// now we can safely set the propertyobj.parent.child.prop = "some value";

 

//现在require(["dojo/_base/lang"], function(lang){  lang.setObject("parent.child.prop", "some value", obj);});

trim()
清除字符串2端的空格。

require(["dojo/dom", "dojo/_base/lang", "dojo/domReady!"], function(dom, lang){  function show(str){    return "|" + lang.trim(str) + "|";  }  dom.byId("output1").innerHTML = show("   one");  dom.byId("output2").innerHTML = show("two ");  dom.byId("output3").innerHTML = show("   three ");  dom.byId("output4").innerHTML = show("\tfour\r\n");  dom.byId("output5").innerHTML = show("\f\n\r\t\vF I V E\f\n\r\t\v");});<p id="output1"></p><p id="output2"></p><p id="output3"></p><p id="output4"></p><p id="output5"></p>

 hitch()

 返回值:一个要执行的方法,附带了一个上下文(context)。

 

require(["dojo/_base/lang"], function(lang){  var myObj = {    foo: "bar"  };  var func = lang.hitch(myObj, function(){    console.log(this.foo);  });  func();});

partial()
和hitch()类似,返回值:方法。区别:没有提供context,传参。

require(["dojo/_base/lang", "dojo/dom", "dojo/dom-construct", "dojo/on", "dojo/domReady!"],function(lang, dom, domConst, on){  var myClick = function(presetValue, event){    domConst.place("<p>" + presetValue + "</p>", "appendLocation");    domConst.place("<br />", "appendLocation");  };  on(dom.byId("myButton"), "click", lang.partial(myClick, "This is preset text!"));});<button type="button" id="myButton">Click me to append in a preset value!</button><div id="appendLocation"></div>