前言
js如何执行函数,指的是声明一个函数之后,在代码里如何去执行它。
函数调用模式
步骤如下, 1、先声明一个函数; 2、然后,调用该函数即可。
方法调用模式
步骤如下, 1、先声明一个函数,只不过这个时候是作为对象的一个方法; 2、然后,调用对象的该方法即可。
总结
不管是哪种执行方式,根本都是先声明一个函数,然后再调用它即可——只不过声明函数的方式有所区别而已。
参考
JS执行函数
JS执行函数:
1:方法调用模式。
请注意this此时指向myobject。
/*方法调用模式*/
var myobject={
value:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()
2:函数调用模式
请注意this此时指向window
/*函数调用模式*/
var add=function(a,b){
alert(this)//this被绑顶到window
return a+b;
}
var sum=add(3,4);
alert(sum)
3:构造器调用模式
javascript语言精粹一书建议摒弃这中方式。因为有更好的方式。这里先不介绍。下次发表博文的时候贴出来。
会在这里加一个连接。
/*构造器调用模式 摒弃*/
var quo=function(string){
this.status=string;
}
quo.prototype.get_status=function(){
return this.status;
}
var qq=new quo(aaa);
alert(qq.get_status());
例子
1、一个容易混淆的例子,函数的声明是在jquery $(function(){声明一个函数})里面进行的,开始还以为在jquery $(function(){})里面声明的函数就会立即执行,看来还是对《js如何执行函数》理解得有点模糊。 2、实际上,不管是在js代码里声明的函数,还是在jquery或其他js框架里声明的函数,执行函数的步骤都是 1)先声明; 2)后调用执行——没有调用函数它的代码就不会被执行。
<script type=text/javascript>
function logOut() {
window.parent.logout();
}
var EventHandler = function(scope, fun, args) {
this.fun = fun;
this.scope = scope;
this.args = args ? args : [];
return this.init();
};
EventHandler.prototype = {
init : function() {
var sc = this;
return function() {
sc.fun.call(sc.scope, sc.args);
};
}
};
$(function() {
function initFirstLevelMenu(datas) {
var ul = $('.nemu ul')[0];
for ( var i = 0, l = datas.length; i < l; i++) {
var data = datas[i];
var li = document.createElement('li'), a = document
.createElement('a'), img = document
.createElement('img');
var div = document.createElement('div');
img.src = data.imagename;
$(img).css(margin, 8px 0px 2px 0px);
$(li).css(position, relative);
$(li).css(left, 0px);
$(li).css(top, 0px);
$(li).click(new EventHandler(li, function(dd) {
if (dd.func) {
doLink2(dd.func);
}
//var thisparent = $(this).parent();
$('.nemu ul li').removeClass('over');
$(this).addClass('over');
initSecondLevelMenu(dd.children);
}, data));
a.href = 'javascript:void(0);';
a.appendChild(img);
li.appendChild(a);
/*$(li).mouseover(function(){
//$(this).addClass('over');
});
$(li).mouseout(function(){
//$('#top .title .nemu ul li').removeClass('over');
});*/
$(div).css(color, #FFFFFF);
$(div).css(font-weight, bold);
$(div).css(font-size, 12px);
$(div).css(font-family, '宋体');
$(div).css(align, center);
div.innerHTML = data.dispname;
li.appendChild(div);
ul.appendChild(li);
}
}
function initSecondLevelMenu(datas) {
$('#secondmenu').html('');
var div = $('#secondmenu')[0], ul = document.createElement('ul');
var ulhtml = ;
if (datas.length == 0) {
var img = 状态定义:
正常
一般故障;
img +=
重大故障;
img +=
预警;
img +=
异常;
img +=
离线
;
$('#div_menu_2').html(img);
return;
}
for ( var i = 0, l = datas.length; i < l; i++) {
var data = datas[i];
var li = document.createElement('li'), a = document
.createElement('a');
if (i == 0) {
ulhtml +=
;
} else {
ulhtml += ;
}
ulhtml += data.dispname + ;
//ulhtml +=
+data.dispname+;
/*$(a).mouseover(new EventHandler(a,function(){
$('#div_menu_2 ul li span .over').removeClass('over');
$(this).addClass('over');
}));
$(a).mouseout(new EventHandler(a,function(){
$(this).removeClass('over');
}));*/
}
$('#secondmenu').html('');
$('#secondmenu').html(ulhtml);
$(li).click(function(dd) {
$(#secondmenu .over).addClass(normal);
$(#secondmenu .over).removeClass(over);
$(this).addClass(over);
doLink2(this.id);
});
}
$
.ajax({
url : '${contextPath}/menuAction!initMenu.action',
data : {
s : Math.random()
},
async : true,
dataType : 'json',
success : function(data) {
if (data.success) {
if (window.parent.getSystemtype() == 1) {
initSecondLevelMenu(data.Data);
// document.getElementById(hideinfo).style.display = none;
var str = new StringBuffer();
/*str.append(
地 图);
str.append(
实时告警台);
str.append(
统计展示台);
*/
str
.append(
地 图);
str
.append(
实时告警台);
str
.append(
统计展示台);
$('#secondmenu').html(str.toString());
var str1 = new StringBuffer();
str1
.append('
系统配置
');
$('#firstmenu').html(str1.toString());
$(li).click(function(dd) {
$(#secondmenu .over).addClass(normal);
$(#secondmenu .over).removeClass(over);
$(this).addClass(over);
doLink2(this.id);
});
$(#secondmenu li).click(function(dd) {
$(#firstmenu .over).removeClass(over);
});
} else {
initFirstLevelMenu(data.Data);
}
} else {
alert(data.msg);
}
},
error : function(e, en) {
if (en == 'parsererror') {
alert('登陆超时,点击【确定】重新登陆');
window.top.location.reload();
} else {
window.top.message(e);
}
}
});
$(.organ).html(( + window.parent.getSystemOrgan() + ));
$(.menuhidden).click(function() {
if ($(this).hasClass('up')) {
$(.nemu).animate({
left : '1281px'
}, fast);
//$(this).animate({left:'1256px'},slow);
$(this).removeClass('up');
} else {
if (window.parent.getSystemtype() == '1') {
$(.nemu).animate({
left : '500px'
}, slow);
$(this).addClass('up');
return;
}
$(.nemu).animate({
left : '500px'
}, slow);
//$(this).animate({left:'476px'},slow);
$(this).addClass('up');
}
});
});
</script>