如何检查JavaScript对象是否为Raphael对象(不是画布,而是圆形、路径等)?
Raphael.el
代表通用元素原型;我认为我想进行测试。
x.__proto__ === Raphael.el
在跨浏览器环境下,但我并不完全确定。
如何检查JavaScript对象是否为Raphael对象(不是画布,而是圆形、路径等)?
Raphael.el
代表通用元素原型;我认为我想进行测试。
x.__proto__ === Raphael.el
在跨浏览器环境下,但我并不完全确定。
Pablo发布了一个不完全正确的答案,但是给了我灵感去找到正确的解决方案:
x.constructor.prototype == Raphael.el
使用 x.constructor.prototype == Raphael.el,您正在获取
x
,可能是 Raphael 元素(圆、路径等 - 不是 Raphael 的 set
或 paper
对象),并将其构造函数的原型与 Raphael 中 Raphael 元素的原型进行比较本身(Raphael 是一个函数对象,el 是其中定义的一个属性)。
这个方法可以工作。但它也无法找到基于与 Raphael.el 不同的原型的 Raphael 对象,例如 set 和 paper 对象:
检测 Raphael 集合
如果你想测试某个东西是否为 Raphael 集合,set 原型在 Raphael.st
中,所以你可以使用以下命令来测试变量是否是 Raphael 集合:
someSet.constructor.prototype == Raphael.st
检测 Raphael 纸张对象
至于检测 Raphael 纸张对象的等效物,因为它们是使用 Raphael()
函数创建的,所以你可以使用:
paper.constructor.prototype == Raphael.prototype
以上三个基本上与...
someSet.constructor.prototype == paper.circle().constructor.prototype
...或...
someSet.constructor.prototype == paper.set().constructor.prototype
...或...
someSet.constructor.prototype == Raphael().constructor.prototype
...但没有实际运行这些函数,因此避免了浪费处理时间(并避免了 Raphael() 抱怨它没有被传递一个ID)。
检测对象子类型(例如矩形、圆形...)
以上都不适用于 Raphael 元素的子类型 - 例如如果您将圆形与 R.rect().constructor.prototype
进行比较,它返回true
。
这是因为圆和矩形都是使用在 Raphael.el
中定义的元素原型制作的。 对于这些,Raphael 使其更容易:
someRectangle.type == "rect"
someCircle.type == "circle"
...等等。
我无法使用提到的答案。但对我有效的是明确地与字符串"Raphaël’s object"
进行比较。
例如:
var textName = paper.getElementByPoint(e.pageX, e.pageY);
if (textName== "Raphaël’s object")
{
...
}
paper.getElementByPoint
。谢谢! - seebiscuit你不能使用constructor
属性并检查创建对象的函数(我假设它被称为Raphael
,但我没有使用过该库)。
编辑
检查了库站点,实际上是这样做的:
obj.constructor === Raphael //true
obj
是否是绘图画布的引用,而不是我想要的在画布上的东西。 - Sophie Alpert