js 函式宣告
阿新 • • 發佈:2019-02-18
問題: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>