动态检查对象类中是否存在函数

时间:2014-05-24 07:48:56

标签: javascript object

我正在尝试创建一个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

我怎么能这样做?或者更好的想法?

1 个答案:

答案 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可以实现,但目前还没有广泛使用。