0

デモ: http://jsfiddle.net/3WpNG/17/

フレームワークを作成しているだけで(学習目的で)、 forEach メソッドを追加しようとしているので、呼び出すとezWork().class('big').forEach(function(element) { console.log(element) });

それは想定されていることを行いますが、エラーが発生します。どんな情報でも素晴らしいでしょう。これはこれまでの私のコードです:

var ezWork = (function (win, doc) {

    function EzWork(element) {
        this.element = this.iD(element);
    }

    EzWork.prototype = {
        iD: function (element) {
            return document.getElementById(element);
        },

        on: function (event, callback, override) {
            var attach = window.hasOwnProperty('addEventListener'),
                meth = attach ? 'attachEvent' : 'addEventListener',
                prefix = attach ? 'on' : '';
            if (!override) {
                this.element[meth](prefix + event, callback, false);
            } else {
                this['on' + event] = callback;
            }
            return this;
        },
        class: function(element) {
         return doc.getElementsByClassName(element);   
        },

        forEach: function() {
            if(!Array.prototype.forEach) {
                Array.prototype.forEach = function(fn, scope) {
                    for(var i = 0, len = this.length; i < len ; i += 1) {
                         fn.call(scope, this[i], i, this);
                    }
                }
            }
        }
    };
    //
    return function (element) {
        return new EzWork(element);
    }
})(window, document);

console.log(ezWork().class('button'));

ezWork().class('button').forEach(function(element) {
    console.log(element);
});

Error: Uncaught TypeError: Object #<NodeList> has no method 'forEach'

4

1 に答える 1

1

次回はコンソールを使用することをお勧めします。エラーはそこから明らかです。

for(var i = 0; len = this.length; i < len ; i += 1)
//           ^---- this should be a comma

ラッピングの大まかな例を次に示します。

function EzWork(element) {
    //stores the data into an instance property
    this.element = element;
}

EzWork.prototype = {
    class: function (element) {
        //wraps the result into the instance and returns the instance
        return new EzWork(doc.getElementsByClassName(element));
    },
    forEach: function (fn) {

        var instance = this;

        //run through the data in the instance
        for (var i = 0, len = instance.element.length; i < len; i += 1) {
            fn.call(instance.element, instance.element[i], i, instance.element);
        }

    }
};
于 2013-04-15T21:37:23.573 に答える