javascript,prototype无法自己创建方法

时间:2015-01-22 10:51:23

标签: javascript methods prototype

我需要让这个工作,但我不知道为什么剂量工作?任何的想法?谢谢你的帮助!

(function( window ) {
    function select( selector ) {
        return document.querySelectorAll(selector);
    };

    select.prototype.attr = function(atitr)
    {
        return this.getAttribute(atitr);
    };

    window.j = select;
})( window );

console.log(j('.lol:last-child').attr('href'));

1 个答案:

答案 0 :(得分:1)

在你的功能中:

function select( selector ) {
    return document.querySelectorAll(selector);
};

所以 select 会返回一个NodeList,它不会从 select 继承。然后是:

window.j = select;

j(...).attr(...)

所以 select 在没有 new 的情况下被调用,因此它不会创建自己的实例并将其分配给 this 。由于无论如何都不返回该对象,即使您使用 new 调用它,返回的对象也不会继承 select

修改

您可以返回将DOM元素作为属性的对象,例如:

<div class="lol">
  <a href="d" class="lol">sadas11DA</a>
  <a href="d31" class="lol">sadas222DA</a>
</div>

<script>

(function(window) {
  function Select(selector) {
    this.nodes = document.querySelectorAll(selector);
  }

  Select.prototype.attr = function(attribute) {
  console.log(this.nodes);
    return this.nodes[0]? this.nodes[0].getAttribute(attribute) : null;
  }

  window.j = Select;
}(this))

console.log(new j('.lol:last-child').attr('href'));

</script>

注意修改后的标记。还传递而非窗口,因为无法修改, window 可以。