2

私は次の問題を抱えています。小さな連鎖を作ろうとしています。

(function(window){
window.de=de={}

de.one=function(s){if(s){var y=document.getElementById(s); return y;} return this;}

de.two=function(s2){alert(s2); return this;}

})(window)

これは私がしようとしていることです:

de.one("Id").two("Hello!");

しかし、コンソールには次のエラーが表示されます。

TypeError: オブジェクト # にはメソッド 'two' がありません

4

3 に答える 3

3

コンソールは嘘をついていません。そのメソッドは に属しているため、 にはHTMLElementという名前のメソッドがありません。twowindow.de

HTMLElementプロトタイプに追加するなど、ホスト オブジェクトを変更しないでください。これらは JavaScript では実装されていません。

代わりに、jQuery のようなメソッドを含むラッパーを作成します。

(function(window) {
    var de = function(thing) {
        return new de.prototype.init(thing);
    };

    de.prototype = {
        constructor: de,

        init: function(thing) {
            this.thing = thing;
        },

        one: function(other) {
            return de(other);
        }
    };

    de.prototype.init.prototype = de.prototype;

    window.de = de;
})(window);

これで、次のことができます。

de('foo').one('bar').one('bar').one('baz')
于 2013-07-22T01:19:55.903 に答える
1

これはできません。問題は de.one() にあります。戻り値には 2 つの異なるタイプがあります。

「y を返す」と「this」を返す。連鎖させたいなら「これ」にしなきゃ。

于 2013-07-22T01:26:14.510 に答える