![]() |
#2
gupiao1752011-02-27 14:44
|
如果标准中普及了这么一个默认方法,我们一定会进行各种尝试,比如:(以下代码使用ff运行)

var obj = {
__noSuchMethod__ : function(name,args){
//obj的方法循环调用
var funName = name.replace(/\d/g,'');
if(typeof this[funName] === 'function'){
for(var i=0,len=parseInt(name.match(/\d+/)[0]) || 0;i<len;i++){
this[funName].apply(this,args);
}
}
//obj的只读属性getter
var r_fields = {
only_r : 'cciscc'
};
var fieldName = name.replace(/^get_/,'');
if(name.substring(0,4) === 'get_' && fieldName in r_fields){
return r_fields[fieldName];
}
}
,greet: function(msg){
console.log(msg);
}
,cc:function(msg){
console.log('cc:'+msg)
}
};
for(var i in obj){
obj[i] = (function(fn){
return function(){
return fn.apply(this,arguments) || this;
};
})(obj[i]);
}
alert(obj.cc5('hi').greet('hi').greet2('hello').get_only_r());
__noSuchMethod__ : function(name,args){
//obj的方法循环调用
var funName = name.replace(/\d/g,'');
if(typeof this[funName] === 'function'){
for(var i=0,len=parseInt(name.match(/\d+/)[0]) || 0;i<len;i++){
this[funName].apply(this,args);
}
}
//obj的只读属性getter
var r_fields = {
only_r : 'cciscc'
};
var fieldName = name.replace(/^get_/,'');
if(name.substring(0,4) === 'get_' && fieldName in r_fields){
return r_fields[fieldName];
}
}
,greet: function(msg){
console.log(msg);
}
,cc:function(msg){
console.log('cc:'+msg)
}
};
for(var i in obj){
obj[i] = (function(fn){
return function(){
return fn.apply(this,arguments) || this;
};
})(obj[i]);
}
alert(obj.cc5('hi').greet('hi').greet2('hello').get_only_r());
http://
[ 本帖最后由 chaoslee 于 2011-2-27 18:02 编辑 ]