dojo1.9学习总结四-函数上下文

源代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	// 获得项目完全路径(假设你的项目叫MyApp,那么获得到的地址就是 http://localhost:8080/MyApp/):    
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<link rel="stylesheet" type="text/css"
	href="<%=basePath%>dojo/dijit/themes/soria/soria.css">
<link rel="stylesheet" type="text/css"
	href="<%=basePath%>dojo/dojo/resources/dojo.css" />
<link rel="stylesheet" type="text/css"
	href="<%=basePath%>dojo/dojox/grid/resources/soriaGrid.css" />
<style type="text/css">
body,html {
	font-family: helvetica,arial,sans-serif;
	font-size: 90%;
}

th {
	font-size: 13px;
	font-family: Arial,Microsoft YaHei,SimSun,sans-serif !important;
	text-align: center;
}

td {
	font-size: 13px;
	font-family: Arial,sans-serif !important;
}

div #copyright {
	text-align: center
}
</style>
</head>
<script type="text/javascript" src="<%=basePath%>dojo/dojo/dojo.js"
	djConfig="parseOnLoad:true">
	
</script>
<script type="text/javascript">
	dojo.require("dijit.layout.ContentPane");
	dojo.require("dijit.layout.BorderContainer");
	dojo.require("dijit.layout.AccordionContainer");
	dojo.require("dijit.layout.TabContainer");
	dojo.require("dijit.form.Button");
	dojo.require("dijit.Dialog");
	dojo.require("dojo.parser");
</script>
<script type="text/javascript">
	var bar = "bar";
	var myObject = {
		id : "objectId",bar : "myObject-bar",onClick : function(evt) {
			var console = dojo.byId("console");
			console.innerHTML = "the bar value is " + this.bar;
		}
	};
	function getValue() {
		//此时bar="myObject-bar"
		myObject.onClick();
	}

	function getValue1() {
		var console = dojo.byId("console");
		var myObject1 = {
			id : "objectId",bar : "myObject1-bar",onClick : function(evt) {
				console.innerHTML = "the bar value is " + this.bar;
			}
		};
		//此时bar="myObject1-bar"
		myObject1.onClick();
	}
	function getValue2() {
		//此时bar=undefined,函数上下文被改变
		dojo.query("#btnValue2").connect("onclick",myObject.onClick);
	}

	//可以应用.apply和.call改变上下文
	function getValue3() {
		dojo.query("#btnValue3").connect("onclick",function fun(evt) {
			myObject.onClick.call(myObject,evt);
		});
	}

	function getValue4() {
		//dojo.query("#btnValue4").connect("onclick",dojo.hitch(myObject,myObject.onClick));
		//还可以这样写
		var change = dojo.hitch(myObject,myObject.onClick);//返回结果是一个函数
		dojo.query("#btnValue4").connect("onclick",change);
	}
</script>
<body class="soria">
	<div id="container">
		<button id="btnValue" data-dojo-type="dijit.form.Button"
			data-dojo-props="onClick:getValue">getvalue</button>
		<button id="btnValue1" data-dojo-type="dijit.form.Button"
			data-dojo-props="onClick:getValue1">getvalue1</button>
		<button id="btnValue2" data-dojo-type="dijit.form.Button"
			data-dojo-props="onClick:getValue2">getvalue2</button>
		<button id="btnValue3" data-dojo-type="dijit.form.Button"
			data-dojo-props="onClick:getValue3">getvalue3</button>
		<button id="btnValue4" data-dojo-type="dijit.form.Button"
			data-dojo-props="onClick:getValue4">getvalue4</button>

	</div>
	<div id="console" style="float: left; width: 400px;">div</div>
</body>
</html>

效果:

相关文章

我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易...
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以...
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部...
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforja...
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑...
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这...