2014-09-23 69 views
0

我拨弄着许多片段,但是这是最接近我到目前为止:对象/功能混合

function Q(a){ 
    if(typeof a=="string"){ 
    var b=a[0],c=a.substring(1); 
    return b=="#"?document.getElementById(c):b=="."?document.getElementsByClassName(c):document.getElementsByTagName(a); 
    } 
} 

Q.setClass=function(b){a.className=b} 

我希望能够做Q("#ID").setClass("testClass");

我怎样才能做到这一点?

+3

你必须从'Q',它实现了'setClass'返回包装对象。 – 2014-09-23 15:25:22

+0

我试过这样做:http://hastebin.com/vavagazeci.coffee,但它没有奏效。你能给我一个提示吗? – 2014-09-23 15:37:27

+2

因为我不知道你期望什么,所以我不能说出究竟“没有工作”。但是,除了将对象的属性'this'设置为'resp'外,'{this:resp}'没有任何意义。它不会影响其他函数的“this”值。也许你只想在该函数内部使用'console.log(resp)'。 – 2014-09-23 15:39:43

回答

1

在你的问题中没有目标函数混合。你需要一个Q(构造函数/工厂)函数,产生一个对象它有一个setClass(方法)函数

例如,这可以做到这样的:

function Q(el) { 
    if (typeof el=="string") { 
    var b = el.charAt(0), 
     c = el.substring(1); 
    el = b=="#" 
     ? [document.getElementById(c)] 
     : b=="." 
      ? document.getElementsByClassName(c) 
      : document.getElementsByTagName(a); 
    } 
    return { 
    setClass: function(cls) { 
     for (var i=0; i<el.length; i++) 
     el[i].className = cls; 
    } 
    }; 
} 
+0

我在评论中用@Felix Kling对它进行了整理,但是我接受你的评论,因为他没有作为回答发表(你的回答更清楚地表明了这一点)。谢谢! – 2014-09-23 15:53:13