チェーンコールの方法
12429 ワード
javascriptチェーンの呼び出し方法は、有用な小テクニックです.大量のコードを節約できます.次の例を見てください.
(function(arg){
alert(arg)
return arguments.callee;
})(' ')(' ')
もちろん、方法を加えて、次のように拡張できます.(function(fn,arg){
var args = Array.prototype.slice.call(arguments);
args.shift().apply(null,args);
return arguments.callee;
})(function(a,b){alert(a+b)},3,5)(function(a,b){alert(a-b)},12,5)
チェーン式のツール関数を作ることができます.function chain(obj){
return function(){
var Self = arguments.callee; Self.obj = obj;
if(arguments.length==0){
return Self.obj;
}
Self.obj[arguments[0]].apply(Self.obj,[].slice.call(arguments,1));
return Self;
}
}
// function/ ClassB
function ClassB(){
this.prop1 = null;
this.prop2 = null;
this.prop3 = null;
}
ClassB.prototype = {
method1 : function(p1){
this.prop1 = p1;
},
method2 : function(p2){
this.prop2 = p2;
},
method3 : function(p3){
this.prop3 = p3;
}
}
var obj = new ClassB();
chain(obj).('method1',4).('method2',5).('method3',6)
もし相手に対して、私達はこうすることができます.<div id="test"></div>
<script>
var $ = function(id){
this.element = document.getElementById(id);
}
$.prototype = {
constructor : $,
show : function(){
setTimeout(function(){console.log('show')},1000);
return this;
},
hide : function(){
setTimeout(function(){console.log('hide')},2000);
return this;
}
}
new $('test').show().hide();
</script>
倉庫から簡略化したチェーンコールをもう一つ見てください.(function(){
function extend(obj){
(function(){
//
this.append=function(obj){
this.appendChild(obj);
return this;
}
//
this.appendTo=function(obj){
obj.appendChild(this);
return this;
}
//
this.attr=function(a,b){
if(a instanceof Object){
for(var x in a){
this.setAttribute(x,a[x]);
}
}else{
this.setAttribute(a,b);
}
return this;
}
//
this.css=function(a,b){
if(a instanceof Object){
for(var x in a){
this.style[x]=a[x];
}
}else{
this.style[a]=b;
}
return this;
}
//
this.html=function(str){
if( typeof str =='undefined'){
return this.innerHTML;
}
this.innerHTML=str;
return this;
}
}).apply(obj);
return obj;
}
window.$c=function(str){
return extend(document.createElement(str));
}
})();
$c('div').appendTo(document.body).attr('name','testName').html('ddddd').css('color','#f00')