Javascript 的原型链方法如何调用匿名函数

Javascript 的原型链方法怎么调用匿名函数?
本帖最后由 jonzrj 于 2014-04-17 15:21:14 编辑
选中行那代码为什么没有执行的效果呢。

我其实想在close()里面调用那个匿名函数 clsSidebarCtn() 来达到关闭边栏内容效果的(第80行),但是就是点了没反应(只关闭了sidebar)。

但是Menubar构造函数里面写一行 clsSidebarCtn() ,和close()方法一样 。返回的实例(这个实例添加到了Sidebar构造函数的this.menubar属性)能够正确显示关闭边栏内容的效果啊。

本人小白,可能表达描述不太准确,见谅。
Javascript 的原型链方法如何调用匿名函数


(function() {

var Menubar = function() {
this.state = 'allClose';//hasOpened
this.currentOpendMenuContent = null;
this.menuList = document.querySelectorAll('#sidebar ul > li')
self = this;
for (var i = 0; i < this.menuList.length; i++) {
this.menuList[i].addEventListener('click',function(e) {
var menuContentEl = document.getElementById(e.currentTarget.id + '-content');
if (self.state === 'allClose') {
console.log('首次打开'+menuContentEl.id);
menuContentEl.style.top = '0';
menuContentEl.style.left= '-85px';
menuContentEl.className = 'nav-content';
menuContentEl.classList.add('menuContent-move-right');
self.state = 'hasOpened';
self.currentOpendMenuContent = menuContentEl;
}else {
console.log('关闭'+ self.currentOpendMenuContent.id)
self.currentOpendMenuContent.className = 'nav-content';
self.currentOpendMenuContent.style.top = '0';
self.currentOpendMenuContent.style.left = '35px'
self.currentOpendMenuContent.classList.add('menuContent-move-left');
console.log('打开'+ menuContentEl.id);
menuContentEl.className = 'nav-content';
menuContentEl.style.top = '200px';
menuContentEl.style.left= '35px';
menuContentEl.classList.add('menuContent-move-up');
self.state = 'hasOpened';
self.currentOpendMenuContent = menuContentEl;
}
})
};

clsSidebarCtn()
};

clsSidebarCtn = function() {
this.menuContentList = document.querySelectorAll('.nav-con-close')
for (var i = 0; i < this.menuContentList.length; i++) {
this.menuContentList[i].addEventListener('click',function() {
console.log('关闭边栏内容'+this.parentNode.className);
self.state = 'allClose';
this.parentNode.style.top = '0';
this.parentNode.style.left = '35px';
this.parentNode.className = 'nav-content menuContent-move-left';
})
};
};

var Sidebar = function(eID, closeBarId) {
this.state = 'opened';
this.menubar = new Menubar();
console.log(this.menubar)
this.el = document.getElementById(eID || 'sidebar');
this.non_close_btn = document.querySelector('#sidebar ul');
this.closeBarEl = document.getElementById(closeBarId || 'closebar')
var self = this;
this.el.addEventListener('click', function(e) {
if (e.target !== self.el) {
self.triggerSwitch();
};
});
this.non_close_btn.addEventListener('click',function(e) {
e.stopPropagation();
})
};

Sidebar.prototype.close = function() {
console.log('关闭sidebar');
this.el.className = 'sidebar-move-left';
this.closeBarEl.className = 'closebar-move-right';
this.state = 'closed';
this.el.style.left = 0 ;
this.closeBarEl.style.left = 0;

console.log('关闭边栏内容');
clsSidebarCtn();
};
Sidebar.prototype.open = function() {
console.log('打开sidebar');
this.el.style.left = '-35px' ;
this.el.className = 'sidebar-move-right';
this.closeBarEl.style.left = '75px'
this.closeBarEl.className = 'closebar-move-left';
this.state = 'opened'
};
Sidebar.prototype.triggerSwitch = function() {
if (this.state === 'opened') {
this.close();
this.state = 'closed';
}else{
this.open();
this.state = 'opened';
}
};
var sidebar = new Sidebar();

})();

------解决方案--------------------
你的clsSidebarCtn() 只是添加click事件,没进行任何dom操作啊