首先,如果这是一个愚蠢的问题,我很抱歉。我在下面写了两个代码片段。从这里找到的第一个代码片段是由我编写的John Resig
,毫无疑问他是最好的之一,第二个代码片段是我从原始代码中修改的,只是为了理解差异,但我不确定两者之间的区别和我的区别可以和不能两者都比较。请有人帮我理解其中的区别。谢谢。
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 );
};
}
var User = makeClass();
User.prototype.init = function(first, last){
this.name = first + " " + last;
};
var user = User("John", "Resig");
console.log(user);
修改版
function myClass(args)
{
if (this instanceof arguments.callee)
{
this.init = function(first, last){
this.name = first + " " + last;
};
this.init.apply( this, args.callee ? args : arguments );
}
else return new arguments.callee( arguments );
}
var obj = new myClass('Sheikh', 'Heera');
console.log(obj);
为什么我应该使用对象的原型来添加一个方法(在创建一个实例之后)而不是在构造函数中编写它?