Sop*_*ert 7 javascript raphael
给定一个JavaScript对象,我如何检查它是否是Raphael对象(不是纸张,而是圆形,路径等)?
Raphael.el代表通用元素原型; 我想我想测试一下
x.__proto__ === Raphael.el
Run Code Online (Sandbox Code Playgroud)
以跨浏览器的方式,但我不完全确定.
详细说明一下并添加一些更相关的信息(我花了一点时间才找出接受的答案,而且我显然不是独自查看其他答案,而且,接受的答案仅适用于一种类型的拉斐尔对象:它解决了原来的问题,这是一个更完整的资源)。
使用x.constructor.prototype == Raphael.el,您正在获取可能是 Raphael元素(圆、路径等 -不是Raphael或对象)x的变量,并将构造它的函数的原型与 Raphael 本身中的 Raphael 元素的原型进行比较(Raphael 是一个函数对象,el是它的定义属性)。setpaper
这是可行的,但它也不会找到基于与 Raphael.el 不同原型的 raphael 对象,例如集合和纸对象:
如果您想测试某个东西是否是拉斐尔集,Raphael.st可以使用集合原型来测试变量是否是拉斐尔集:
someSet.constructor.prototype == Raphael.st
至于嗅探 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)。
以上都不适用于拉斐尔元素的子类型 - 例如,如果将圆与 进行比较R.rect().constructor.prototype,它将返回true。
这是因为圆形和矩形都是使用中定义的元素Raphael.el原型制作的。然而,对于这些,拉斐尔让事情变得简单:
someRectangle.type == "rect"
someCircle.type == "circle"
...ETC..
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |