0

カスタム コンストラクター関数のプロトタイプを で拡張したいと思い$.extendます。拡張オブジェクトには、toStringIE で列挙できないカスタム メソッドが含まれています (8?)。jQuery がこの問題を内部的に修正するかどうかはわかりませんでした。

var myConstructor = function() { /* ... */ };

$.extend(myConstructor.prototype, {
    toString: function() { return "foo"; }
});

これは機能しますか?そうでない場合: 簡単な修正はありますか、それとも独自の for-in ループを使用する必要がありますか?

4

1 に答える 1

0

私はそれを自分でテストする機会がありましたが、jQuery はそうではありません。これが私が見つけた解決策です:

var extendPrototype = function() {
    var objectPrototype = Object.prototype,
        hasOwnProperty = objectPrototype.hasOwnProperty,
        isBuggy = !{valueOf: 0}.propertyIsEnumerable("valueOf"),
        keys;

    if(isBuggy)
        keys = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");

    return function(prototype, object) {
        var i,
            key;

        for(key in object)
            if(hasOwnProperty.call(object, key))
                prototype[key] = object[key];

        if(isBuggy) {
            i = 0;

            for(i; key = keys[i]; i ++)
                if(object[key] !== objectPrototype[key] || hasOwnProperty.call(object, key))
                    prototype[key] = object[key]
        }

        return prototype
    }
}();
于 2013-10-23T15:06:19.393 に答える