<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
<script src="dojoTools/dojo/dojo.js.uncompressed.js"></script>
<script>
require(["dojo/dom", "dojo/dom-attr", "dojo/dom-construct", "dojo/string", "dojo/_base/array", "dojo/_base/lang", "dojo/query", "dojo/_base/window", "dojo/on", "dijit/dijit", "dijit/TitlePane", "dojo/parser", "dojo/domReady!"], function (dom, domAttr, domConstruct, str, array, lang, query, win, on, dijit, TitlePane, parser) {
//1.var newObject=lang.clone(objcet);//复制对象,深复制
on(dom.byId("clone"), "click", function () {
var n = query(".someNode")[0];
var i = 10;
while (i--) {
domConstruct.place(lang.clone(n), win.body());
}
});
//2.lang.delegate():给对象添加新的属性..返回一个新的对象..新复制的对象对原属性仍旧引用
//var newObject=lang.delegate(anOldObject,{myNewProperty:"value or text"});
on(dom.byId("delegate"), "click", function () {
var anOnldObject = { bar: "bar" };
var myNewObject = lang.delegate(anOnldObject, { thud: "xyzzy" });
console.log(myNewObject.thud);//xyzzy
console.log(myNewObject.bar);//bar
console.log(anOnldObject.thud);//undefine
console.log(anOnldObject.bar);//bar
anOnldObject.bar = "thonk";
console.log(anOnldObject.bar);//thonk
});
//3.lang.exists(paths,namespace)//判断路径是否存在
//if (lang.exists("myns.widget.Foo")) {
// console.log("myns.widget.Foo");
//}
on(dom.byId("exists"), "click", function () {
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");
}
});
//4.lang.extend(class,{attribute:value})
on(dom.byId("extend"), "click", function () {
lang.extend(TitlePane, {
randomAttribute: "value"
});
parser.parse();
});
//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));
//5.getObject("object.attr",boollen):获取对象的属性,当设为true时,如果为找到属性就创建..
on(dom.byId("getObject"), "click", function () {
var foo = { bar: "some value" };
//var v = lang.getObject("foo.baz", true);
var v = lang.getObject("bar", false, foo);
var v2 = lang.getObject("baz", true, foo);
var v3 = lang.getObject('bar', true, foo);
var v4 = lang.getObject("baz", false, foo);
console.log(v);
console.log(v2);
console.log(v3);
console.log(v4);
});
//6.lang.hitch(this,processEvent);//保持执行方法所需的最初上下文
on(dom.byId("hitch"), "click", function () {
var myObj = {
foo: "bar",
method: function (arg) {
console.log(this.foo);
},
method2: function (arg) {
console.log(arg + " " + this.foo);
}
};
var func = lang.hitch(myObj, "method");
var func2 = lang.hitch(myObj, "method2", "origin:最初的");
func();
func2();
});
//7.lang.partial(eventHandler,arguments);//向方法中传递参数
var myClick = function (presetValue, event) {
domConstruct.place("<p>" + presetValue + "</p>", "appendLocation");
domConstruct.place("<br />", "appendLocation");
};
on(dom.byId("partial"), "click", lang.partial(myClick, 'thi is preset text!'));
//8.lang.replace(string(key),{key:value});
on(dom.byId("replace"), "click", function () {
//with Directory
//dom.byId("output").innerHTML = lang.replace("Hello,{name.first} {name.last} AKA {nick}!", {
// name: {
// first: "Robert",
// middle: "X",
// last:"Cringely"
// },
// nick:'bobobo'
//})
//with Array
//dom.byId("output").innerHTML = lang.replace(
// "Hello, {0} {2} AKA {3}!",
// ["Robert", "X", "Cringely", "Bob"]
// );
// helper function
//with 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;
// }
// }
// )
//);
dom.byId("output").innerHTML = lang.replace(
"Hello, %[0] %[2] AKA %[3]!",
["Robert", "X", "Cringely", "Bob"],
/\%\[([^\]]+)\]/g
);
});
//9.lang.trim()
//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");
});
</script>
</head>
<body>
<h3 class="someNode">Shallow Copy:浅复制</h3>
<button id="clone">lang.clone()方法</button>
<button id="delegate">lang.delegate()方法</button>
<button id="exists">lang.exists()方法</button>
<button id="extend">lang.extend()方法</button>
<div data-dojo-type="dijit/TitlePane" data-dojo-props="randomAttribute:'newValue'">directly:立刻,马上</div>
<button id="getObject">lang.getObject()方法</button>
<button id="hitch">lang.hitch()方法</button>
<button id="partial">lang.partial()方法</button>
<div id="appendLocation"></div>
<button id="replace">lang.replace()方法</button>
<p id="output"></p>
</body>
</html>