-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 调用的正确方法。但是,我个人并不喜欢这个过程。它鼓励开发人员在没有 new 运算符的情况下调用构造函数。

于 2012-12-30T01:59:13.183 回答