【问题标题】:return item with chaining pattern javascript返回带有链接模式javascript的项目
【发布时间】:2013-07-22 00:54:45
【问题描述】:

我正在开发一个小型库来了解有关 javascript 的更多信息

我正在使用链接模式:

(function(window) {
    var myLibrary = function(iD) {
        var e = document.getElementById(iD),
            methods = {
                one: function(val) {
                    e.innerHTML = val;
                    return this; // maintain chainability
                },
                two: function(val) {
                    alert(val);
                    return this; // maintain chainability
                }
            };
        return methods;
    };
    window.myLibrary = myLibrary;
})(window);

链接很好,但我不能使用 JavaScript 的内部属性。例如

myLibrary("ID").length

有退货的想法吗?

【问题讨论】:

  • 您希望.length 究竟代表什么?您总是在检索 一个 (或零)元素(由id 提供)......所以表示找到的元素数量是没有意义的(就像 jQuery 是如何做到的那样)。
  • 我不知道它是否有帮助,但这或多或少是我设置这个“库”的方式:jsfiddle.net/mq38W/1(我会说它有点接近 jQuery 处理事情的方式,尽管显然缺少很多东西,而且结构也不完全相同)

标签: javascript jquery oop object chaining


【解决方案1】:

length 属性通常与Strings 和Arrays 等有序集合相关联。 methods,作为Object,两者都不是。

所以,如果你想让它有一个length,你必须给它一个:

methods = {
    length: e == null ? 0 : 1,

    // ...
};
myLibrary('ID').length

或者,定义一个returns 不是this 的方法,它本身将具有length

methods = {
    html: function () {
        return e.innerHTML;
    },

    // ...
};
myLibrary('ID').html().length

【讨论】:

  • 我认为她想获得长度始终为 1/0 的元素数量
  • @Ankit 第一个 sn-p 证明了这一点,达到了getElementById() 的极限——e == null ? 0 : 1
  • +1是的,你是对的,但是我不喜欢这个库的构建方式
  • 把我弄糊涂了,把documen.getElementById 放在document.getElmentsByTagName
猜你喜欢
  • 2016-05-11
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2012-12-24
相关资源
最近更新 更多