87,910
社区成员
发帖
与我相关
我的任务
分享
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<script>
function linkClosedMode()
{
var _this = this;
// 仅仅起到function引用对象占位的作用
_this.start = function(){return _this;};
// 使用第2章2.1节D中"闭包链式模式",
// 使得默认的构造函数执行的时候先执行父类的构造函数
_this.add = fnPrivateFunc(func)
{
var oLstFunc = _this.start;
_this.start = function()
{
// 用apply(this, arguments),使得start的所有参数带入链路中的所有函数
oLstFunc.apply(this, arguments);
func.apply(this, arguments);
oLstFunc = null;
delete _this.start;
_this.start = function(){};
};
return _this;
};
for(var i = 0, j = arguments.length; i < j; i++)
_this.add(arguments[i]);
return this;
}
// 使用:
new linkClosedMode().add(function()
{
alert("加入的第一个方法")
}).add(function()
{
alert("加入的第二个方法")
}).add(function()
{
alert("加入的第三个方法")
}).start();
// 或者:
new linkClosedMode(function()
{
alert("加入的第1个方法")
},function()
{
alert("加入的第2个方法")
},function()
{
alert("加入的第3个方法")
}).start();
</script>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<script>
function linkClosedMode()
{
var _this = this;
// 仅仅起到function引用对象占位的作用
_this.start = function(){return _this;};
// 使用第2章2.1节D中"闭包链式模式",
// 使得默认的构造函数执行的时候先执行父类的构造函数
_this.add = function(func) // <<<<<<<<<<<<<<<
{
var oLstFunc = _this.start;
_this.start = function()
{
// 用apply(this, arguments),使得start的所有参数带入链路中的所有函数
oLstFunc.apply(this, arguments);
func.apply(this, arguments);
oLstFunc = null;
delete _this.start;
_this.start = function(){};
};
return _this;
};
for(var i = 0, j = arguments.length; i < j; i++)
_this.add(arguments[i]);
return this;
}
// 使用:
new linkClosedMode().add(function()
{
alert("加入的第一个方法")
}).add(function()
{
alert("加入的第二个方法")
}).add(function()
{
alert("加入的第三个方法")
}).start();
// 或者:
new linkClosedMode(function()
{
alert("加入的第1个方法")
},function()
{
alert("加入的第2个方法")
},function()
{
alert("加入的第3个方法")
}).start();
</script>