【问题标题】:How to check recieved parameter in javascript function an instance of user defined object?如何检查用户定义对象实例的javascript函数中收到的参数?
【发布时间】:2016-09-12 06:22:33
【问题描述】:

我有一个带有变量“对象”的 javascript 函数,它可以接收两种类型的对象中的任何一种,比如 x 和 y 对象

function myFunction(object){alert(instanceof object) };

有这样的吗? 它应该提醒 x 或 y

【问题讨论】:

  • 你的用例是什么?你真正想做什么?
  • 你可以试试object.constructor.name
  • if (object instanceof x) { /* do something */ }
  • 我有一个基于对象实例的if条件

标签: javascript


【解决方案1】:

有这样的吗?它应该提醒 x 或 y

是的:

alert(object instanceof TheConstructorYouWantToCheckAgainst);

如果我正确阅读了您的问题,您的构造函数是 xy(惯例是使用大写的首字母)。比如:

function x() {
}
function y() {
}
var o = new x();
console.log(o instanceof x); // true
console.log(o instanceof y); // false

如果您想在通过new x 创建时从object 获取"x",则在ES5 及之前的版本中无法可靠。在 ES2015(又名“ES6”)及更高版本中,函数具有name 属性,该属性以多种方式设置(即使该函数是使用“匿名”函数表达式创建的)。所以如果x 有一个名字(它仍然有可能没有),并且如果继承链已经正确设置,object.constructor.name 会给你"x"。但我不会依赖它,因为人们在做继承链时会搞砸constructor总是

【讨论】:

  • 感谢您的信息!
【解决方案2】:

您可以根据需要使用不同的解决方案

在下面的代码中,我使用了 X 对象。对于另一种情况,将 X 替换为 Y

object instanceof X;     // == true
object.constructor.name;        // == "X"

X.prototype.isPrototypeOf(object);  // == true

【讨论】:

  • 请参阅我关于 object.constructor.name 的回答中的 cmets。它不可靠(人们总是搞砸constructor),并且在 ES5 及更早版本中根本不存在。
  • 你什么时候会使用X.prototype.isPrototypeOf(object)而不是object instanceof X
  • 是的,我的意思是这些信息应该直接在答案中。
  • 我应该澄清我上面的评论:人们总是搞砸constructor,而name 函数在 ES5 及更早版本中根本不正式存在(constructor 确实存在!)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2013-01-14
  • 1970-01-01
  • 2018-03-18
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多