まず第一に、これがばかげた質問であるならば、すみません。以下に2つのコードスニペットを作成しました。ここから見つかった最初のコードスニペットは間違いなく彼によって書かれJohn Resig
、間違いなく彼は最高の1つであり、2番目のコードスニペットは違いを理解するためだけに元のコードから私によって変更されていますが、実際には両方と私が何の違いがあるのかわかりません両方で比較的できることとできないこと。誰かが私に違いを理解するのを手伝ってください。ありがとう。
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);
コンストラクター内にメソッドを記述する代わりに、オブジェクトのプロトタイプを使用して(インスタンスを作成した後に)メソッドを追加する必要があるのはなぜですか?