如何解决如何检查某物是否为Raphael对象?
| 给定一个JavaScript对象,如何检查它是否是Raphael对象(不是纸张,而是圆,路径等)? “ 0”代表通用元素原型;我想我要测试x.__proto__ === Raphael.el
以跨浏览器的方式,但我不确定。
解决方法
要详细说明并添加一些其他相关信息(花了我一些时间才知道接受的答案,而且显然我不是一个人在看其他答案,而且,接受的答案仅适用于一种类型的Raphael对象:它解决了原始问题,这是更完整的资源)。
检测拉斐尔元素
使用
x.constructor.prototype == Raphael.el
,您将得到x
,该变量可能是Raphael元素(圆,路径等-不是Raphaelset
或paper
对象),并将构造该函数的函数原型与Raphael中Raphael元素的原型进行比较本身(Raphael是一个函数对象,el是它的定义属性)。
这可行,但也不会根据与Raphael.el不同的原型找到Raphael对象,例如布景和纸质对象:
检测拉斐尔集
如果要测试某物是否为Raphael集,则该集的原型为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
。
这是因为圆形和矩形都是使用“ 0”中定义的元素原型制作的。但是,对于这些,Raphael使其变得容易:
someRectangle.type == \"rect\"
someCircle.type == \"circle\"
...等等..
, Pablo发布了一个不太正确的答案,但给了我寻找正确解决方案的灵感:
x.constructor.prototype == Raphael.el
, 您不能使用constructor
属性并检查创建对象的函数(我假设它的名称为Raphael
,但我没有使用lib)。
编辑
检查了lib网站,实际上是这样的:
obj.constructor === Raphael //true
, 我无法使用上述答案。但是对我有用的是与字符串\"Raphaël’s object\"
进行显式比较。
例如:
var textName = paper.getElementByPoint(e.pageX,e.pageY);
if (textName== \"Raphaël’s object\")
{
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。