引用:http://ejohn.org/blog/simple-class-instantiation/
// makeClass - By John Resig (MIT Licensed)
function makeClass(){
return function(args){
if ( this instanceof arguments.callee ) {
if ( typeof this.init == "function" )
this.init.apply( this, args.callee ? args : arguments );
} else
return new arguments.callee( arguments );
};
}
我想知道是否有任何ECMAScript 5兼容方式来实现相同功能。问题是,在严格模式下不赞成访问
arguments.callee
。 最佳答案
据我了解,在严格模式下不建议弃用arguments.callee
,在这种情况下,您可以继续使用它。相反,它已被删除,尝试使用将(或应该)引发异常。
解决方法是使用命名匿名函数,如果您会原谅oxymoron。真的,我应该说"named function expressions"。一个例子:
function someFunc(){
return function funcExpressionName(args){
if (this instanceof funcExpressionName) {
// do something
} else
return new funcExpressionName( arguments );
};
}
在我的示例中,您提供的名称
funcExpressionName
不应从任何地方访问,除非它适用于该函数内部,但是不幸的是IE还有其他想法(如您所看到的Google it所示)。对于您问题中的示例,我不确定如何处理
args.callee
,因为我不知道调用函数如何设置它,但是按照我的示例将替换arguments.callee
的使用。