1. 程式人生 > >js 函式宣告

js 函式宣告

問題:function的定義和宣告,在物件裡面的函式不初始化嗎?

<script type="text/javascript">
function fousFun(id){
$("#"+id).focusin(function() {
$("#"+id).val("");
});
}
function fousOut(id){
$("#"+id).focusout(function() {
$("#"+id).val("找人");;
});
}
 
var header={
topHtml:function(){
return '你好:<input id="inputId" name="inputName" value="找人" onfocus="fousFun(this.id);" onblur="fousOut(this.id);" />';
},
init:function(){
$("body").append(this.topHtml);
/* $("#inputId").focusin(function() {
$("#inputId").val("");
});
$("#inputId").focusout(function() {
$("#inputId").val("找人");
}); */
}
};
header.init();
</script>

將兩個函式放在物件header裡,老說未定義,主要的原因是定義的函式有作用域,而呼叫函式的位置在body裡的標籤的onfous函式,此時呼叫的是window物件的函式,而不能調到header裡的方法。

如果在header裡使用繫結函式的方法可以呼叫header裡的方法,例如如下:

<script type="text/javascript">
 
var header={
	topHtml:function(){
		return '你好:<input id="inputId" name="inputName" value="找人" />';
	},
	fun1:function(){
		$("#inputId").val("");
	},
	fun2:function(){
		$("#inputId").val("找人");
	},
	init:function(){
		$("body").append(this.topHtml);
		$("#inputId").on("focus",this.fun1);
		$("#inputId").on("blur",this.fun2);
		}
};
header.init();
</script>