我正在尝试创建一个jQuery样式对象类。
function obj(id){
if (this.__proto__.constructor !== obj) {
return new obj(id);
}
this.element = document.getElementById(id);
this.remove = function(){
this.element.parentNode.removeChild(this.element);
}
this.offset = function(){
return this.element.getBoundingClientRect();
}
}
obj(id).offset() // defined
obj(id).removeChild() //undefined
obj(id).appendChild() // undefined
obj(id).remove() // undefined
我遇到了问题。 jQuery对象也可以用作$('#someid').innerHTML
之类的Javascript DOM对象,但我的对象。我正在考虑一个动态检查此对象类中是否存在方法的解决方案,然后返回一个DOM对象return this.element
。
我怎么能这样做?或者更好的想法?
答案 0 :(得分:1)
jQuery对象也可以用作Javascript DOM对象,如
$('#someid').innerHTML
不,它不能。 innerHTML
也会有undefined
。 jQuery对象是围绕元素集的包装器。您可以执行$('#someid')[0].innerHTML
(请注意访问者[0]
)。
...检查此对象类中是否存在方法...
如果要测试函数是否存在,可以使用typeof
:
if (typeof obj.method === "function")
请注意,对于某些旧版浏览器上的某些主机提供的功能,您可能会获得"object"
而不是"function"
,因此您必须允许这样做。
但是,您必须在使用该功能的情况下这样做。
我正在考虑一个动态检查此对象类中是否存在方法的解决方案,然后返回一个DOM对象返回this.element。
这是一个坏主意。相反,提供一种访问底层元素的方法(jQuery的方式)。 ES6's proxies可以实现,但目前还没有广泛使用。