-1
function User(first, last){
  if ( !(this instanceof arguments.callee) )
    return new User(first, last);

  this.name = first + " " + last;
}

var name = "Resig";
var user = User("John", name);

assert( user, "This was defined correctly, even if it was by mistake." );
assert( name == "Resig", "The right name was maintained." );

インスタンスが new 演算子を使用して作成されているかどうかを確認するには、コンストラクターでこれらを行います。

if ( !(this instanceof arguments.callee) )

また

if ( !(this instanceof ___) )

また

if ( !(this instanceof User) )

このフォーラムで、arguments.callee が減価償却され、代わりに apply メソッドまたは call メソッドを使用する必要があることを読みました。

そのオブジェクトのインスタンスが call メソッドまたは apply メソッドを使用しているかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

1

最後に示したオプションは、コンストラクターがnewで呼び出されたかどうかを確認する正しい方法だと思います。しかし、私は個人的にこのプロセスが好きではありません。開発者は、新しい演算子なしでコンストラクターを呼び出すことをお勧めします。

于 2012-12-30T01:59:13.183 に答える