【分享】一个JS小工具 javascript工具 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 说全局不准确,而是把局部的变量Jim与调用方法showName移植在FunUtil局部内触发。 这个工具的用处就是可以在对象作用域之外来调用对象的方法,在动态拼接按钮的时候用到如果事先在html写好标签,这个就用不到了 <script type="text/javascript"> <!-- //各函数私有变量不能互相访问,那我把他们都请到我家来不就解决问题。 var FunUtil = (function(){ return function(param,k){ if(k){ showName(arr[--k]);//直接调用函数 }else{ !this.arr&&(arr=[]); arr.push(param);//存储变量,也是复制一下变量 return "FunUtil('',"+(arr.length)+")"; } }; })(); function showName(obj){ alert(obj.name); } window.onload = function(){ var Jim = {name:"Jim"}; var Lucy = {name:"Lucy"}; var buttons = '<input type="button" value="没有工具" onclick="'+FunUtil(Jim)+'">' +'<input type="button" value="没有工具" onclick="'+FunUtil(Lucy)+'">'; document.body.innerHTML += buttons; }; //--> </script>没有那么神秘。 再举个例子前台JS通过AJAX请求获取到商品列表,把商品名称展现到html上,点击商品名称显示商品详情// 查看商品详情function showDetail(goods){ alert('厂商:'+goods.factory+',价格:'+goods.price);}window.onload = function(){ // 从后台获取商品列表 var goodsItems = [ {name:'手机',factory:'NOKIA',price:1000} ,{name:'电脑',factory:'Apple',price:2000} ] // 生成html,点击查看商品详情 for(var index in goodsItems){ var goods = goodsItems[index]; //document.body.innerHTML += '<a href="javascript:showDetail('+goods+')">'+goods.name+'</a><br>'; // error :( document.body.innerHTML += '<a href="javascript:'+FunUtil.createFun(window,'showDetail',goods)+'">'+goods.name+'</a><br>' }}当然可以传一个商品ID,通过商品ID查询商品信息再显示,这样的话就多了一步数据库操作了,显然是不好的 其实说白了就是允许我们在某个函数的外部作用域调用其自身作用域范围内的方法有时为了防止重名,会把函数声明在另一个函数内部,如:window.onload = function(){ // 内部类 function Inner(){ var name = "Jim"; this.showName = function(){ alert(name); } } var inner = new Inner(); // 通过<A>标签在外部作用域调用inner.showName() document.body.innerHTML += '<a href="javascript:'+FunUtil.createFun(inner,'showName')+'">Test</a><br>'; document.body.innerHTML += '<a href="javascript:inner.showName()">Test2</a><br>'; // error} 没看明白你们想说什么 好像饶了一个非常大的圈子后又返回来一样 本来可以直接从a走到b的 非要从a走到c在走到d在走到f然后回到b jquery ui 换肤 问题 请问each()中如何获取当前遍历的对象 JS中怎样用setTimeout来实现5张图片不断的轮换显示 求解技术问题 用JS怎么实现按键盘上的某个键? 请教关于坐标 求助一个简单问题 如何在<script language="javascript" > </script>内使用session["123"]的内容! div嵌套的点击事件 怎么得到后退的地址? 按小到大数组排序 求高手帮忙解决IE浏览器下,网站JS加载错误问题
如果事先在html写好标签,这个就用不到了
<!--
//各函数私有变量不能互相访问,那我把他们都请到我家来不就解决问题。
var FunUtil = (function(){
return function(param,k){
if(k){
showName(arr[--k]);//直接调用函数
}else{
!this.arr&&(arr=[]);
arr.push(param);//存储变量,也是复制一下变量
return "FunUtil('',"+(arr.length)+")";
}
};
})();
function showName(obj){
alert(obj.name);
}
window.onload = function(){
var Jim = {name:"Jim"};
var Lucy = {name:"Lucy"};
var buttons = '<input type="button" value="没有工具" onclick="'+FunUtil(Jim)+'">'
+'<input type="button" value="没有工具" onclick="'+FunUtil(Lucy)+'">';
document.body.innerHTML += buttons;
};
//-->
</script>
没有那么神秘。
前台JS通过AJAX请求获取到商品列表,把商品名称展现到html上,点击商品名称显示商品详情
// 查看商品详情
function showDetail(goods){
alert('厂商:'+goods.factory+',价格:'+goods.price);
}window.onload = function(){
// 从后台获取商品列表
var goodsItems = [
{name:'手机',factory:'NOKIA',price:1000}
,{name:'电脑',factory:'Apple',price:2000}
] // 生成html,点击查看商品详情
for(var index in goodsItems){
var goods = goodsItems[index];
//document.body.innerHTML += '<a href="javascript:showDetail('+goods+')">'+goods.name+'</a><br>'; // error :(
document.body.innerHTML += '<a href="javascript:'+FunUtil.createFun(window,'showDetail',goods)+'">'+goods.name+'</a><br>'
}}
当然可以传一个商品ID,通过商品ID查询商品信息再显示,这样的话就多了一步数据库操作了,显然是不好的
有时为了防止重名,会把函数声明在另一个函数内部,如:
window.onload = function(){
// 内部类
function Inner(){
var name = "Jim";
this.showName = function(){
alert(name);
}
} var inner = new Inner();
// 通过<A>标签在外部作用域调用inner.showName()
document.body.innerHTML += '<a href="javascript:'+FunUtil.createFun(inner,'showName')+'">Test</a><br>';
document.body.innerHTML += '<a href="javascript:inner.showName()">Test2</a><br>'; // error
}